我似乎找不到一种优雅的方式来做到这一点。
但是,假设我的模型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")
}
感谢您的任何提示。
,既然您希望从中获得最终值,因此模型方法是最好的方法。(作用域应返回关系以支持链接)您可以使用这些范围返回完成百分比,如下所示:
def percent_complete
not_complete.size.to_f / complete.size.to_f
end
或者,如果你的模型中需要big_decimal和big_decimail/util,你可以使用to_d来获得小数除法。那么在您看来,您所要做的就是@project.%_完成