我喜欢在我的has_many关系中添加一个方法,方法是将它应用于关系对象。
我收到了一份订单:has_many line_items
我喜欢写像
order.line_items.calculate_total # returns the sum of line_items
我可以这样做:
:has_many line_items do
def calculate_total
...
end
end
但这不适用于像payalbes_only这样的named_scope:
order.line_items.payables_only.calculate_total
这里计算总数将收到所有line_items的订单,而不是来自paids_only-scope的范围。我的日志告诉我,paybles_only范围甚至没有应用于sql。
答案 0 :(得分:1)
实现这一目标的一种方法是使用class_eval,例如:
Array.class_eval do
def calculate_total
total = 0
self.each do |item|
total = total + item.value if item.class.to_s == 'LineItem'
end
return total
end
end