如何在ActiveRecord中找到完成百分比?

时间:2011-05-10 02:04:15

标签: ruby-on-rails-3 named-scope

我似乎无法找到一种优雅的方式来做到这一点。

但是,假设我的模型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")
  }

感谢您的任何提示。

1 个答案:

答案 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