我有这堂课:
class Invoice < ActiveRecord::Base
has_many :payments
def payable?
amount_payable != 0
end
end
如何获得total
为payments
的所有invoice
的{{1}}?
payable
问题似乎是class Payment < ActiveRecord::Base
belongs_to :invoice
def self.total
where("invoices.payable? = ?", true).map(&:amount).sum
end
end
子句只接受数据库列名而不接受where
之类的函数。
有人能告诉我怎么做吗?
感谢您的帮助。
答案 0 :(得分:3)
您无法在SQL中运行Ruby方法。由于这个逻辑很简单,你可以做到
where("amount_payable != ?", 0)
如果您的Ruby方法无法用纯SQL表示,唯一的方法是获取所有记录,然后在Ruby中过滤它们(这样效率很低),如下所示:
all.select(&:payable?)