【问题标题】:How can I find percent complete in ActiveRecord?如何在 ActiveRecord 中找到完成百分比?
【发布时间】:2011-05-10 02:04:14
【问题描述】:

我似乎找不到这样做的优雅方式。

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

感谢任何提示。

【问题讨论】:

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


    【解决方案1】:

    我认为,由于您希望从中获得最终值,因此模型方法将是最好的方法。 (范围应返回 Relation 以支持链接)您可以使用这些范围返回完成百分比,类似于:

    def percent_complete
      not_complete.size.to_f / complete.size.to_f
    end
    

    或者,如果您的模型中需要 big_decimal 和 big_decimail/util,您可以使用 to_d 来获得十进制除法。那么在你看来,你所要做的就是@project.percent_complete

    【讨论】:

    • 感谢您提醒我有关链接和关系的信息。我将其更改为: def self.percent_complete c = complete.size.to_f n = not_complete.size.to_f 如果 c == 0 返回 0 如果 n == 0 返回 100 not_complete.size.to_f / complete.size.to_f end
    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2021-08-25
    相关资源
    最近更新 更多