Class Order < ActiveRecord::Base
scope :ordered, lambda { |user| where("orders.user_id = ?", user.id) }
scope :delivered, lambda { |user| where("orders.user_id = ? and orders.delivered = ?", user.id, true) }
def self.delivered_percentage (user)
((self.ordered(user).count/self.delivered(user).count) * 100)
end
end
我有一个Order模型,我需要找出
ordered和deliver方法返回一个数组。如何让他们返回计数,并计算交付物品的百分比。
在我的控制器中我想
Order(current_user).delivered_percentage
谢谢!
答案 0 :(得分:1)
ordered
和delivered
返回ActiveRecord::Relation
。如果在其上调用count
,将返回SQL count
查询的结果。因此,您的方法基本上应该可行 - 除非您必须将计数转换为浮点数才能使其正常工作:
def self.delivered_percentage(user)
(ordered(user).count.to_f / delivered(user).count.to_f) * 100
end
你打电话给:
Order.delivered_percentage(current_user)
答案 1 :(得分:1)
Order.group('delivered').count
这将返回一个哈希:{true =&gt; 10,false =&gt; 33}使用单个SQL查询。
所以你应该能够做到这一点:
def self.delivered_percent(user)
delivered_counts ||= Order.group('delivered').where(user: user).count
delivered_counts[true]/delivered_counts.values.sum.to_f
end