数组到活动记录模型

时间:2009-06-17 18:18:00

标签: ruby-on-rails arrays activerecord

我想在视图中显示具体(今天)一天的任务。这些任务的估计时间必须达到每天6小时。

在模型中我有这个方法:

def self.tasks_for_today
  total_time = 0
  r = Array.new
  all(:conditions => "finished = 0").each do | t |
    total_time += t.estimated_time
    r << t if total_time <= 6
  end  
  r 
end

并且运行正常,但我需要“r”变量作为Tasks模型的实例,而不是Array类的实例...

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可能已经做过的一个重构就是使用named_scoped来完成未完成的任务:

class Shirt < ActiveRecord::Base
  named_scope :unfinished, :conditions => {:finished => false}
end

你真的不想返回一个实例(一个实例只意味着一个任务)。

您可以订购任务get a running sum,然后只返回运行金额低于6的任务。我必须考虑更多,但如果你这样做,那么你'最终将使用find_by_sql和您选择的数据库引擎提供的SQL魔法。

答案 1 :(得分:0)

您的方法将返回一组任务,Task.all也会返回一组任务。试试吧:

>> Task.all.class
=> Array

使用任何数组,您都可以执行以下操作:

t.first
t.each {|a| ... }

您对结果的确切想要做什么?

答案 2 :(得分:0)

谢谢大家,这是我的错,这个方法做了我想要的......

以下是最终代码:

def self.tasks_for_today
  total_time = 0
  r = Array.new
  all(:conditions => "finished = 0").each do | t |
    total_time += t.estimated_time
    total_time <= 6 ? r << t : break
  end
  r
end