我想在视图中显示具体(今天)一天的任务。这些任务的估计时间必须达到每天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类的实例...
我该怎么做?
答案 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