我似乎无法找到一种优雅的方式来做到这一点。
但是,假设我的模型Projects
有很多Tasks
。
每个task
都有一个complete
的布尔字段。
所以如果我有10个tasks
而4个是“完整”而6个不是,那么我只有40%完成。
是否有一种灵活的方法可以在scope
中执行此操作,以便SQL是精益的?
我已经有两个范围,如:
scope :complete, lambda {
where("tasks.complete = true")
}
scope :not_complete, lambda {
where("tasks.complete = false")
}
感谢您的任何提示。
答案 0 :(得分:2)
我认为,既然你想从中获得最终价值,那么模型方法将是最好的方法。 (范围应返回一个Relation以支持链接)您可以使用这些范围来返回完成百分比,类似于:
def percent_complete
not_complete.size.to_f / complete.size.to_f
end
或者如果你的模型中需要big_decimal和big_decimail / util,你可以使用to_d来获得十进制除法。然后在您的视图中,您所要做的就是@ project.percent_complete