我有这门课:

class Invoice < ActiveRecord::Base

  has_many :payments

  def payable?
    amount_payable != 0
  end

end

我怎样才能得到所有totalpaymentsinvoice
class Payment < ActiveRecord::Base

  belongs_to  :invoice

  def self.total
    where("invoices.payable? = ?", true).map(&:amount).sum
  end

end

问题似乎是payable子句只接受数据库列名,而不接受像where这样的函数。
有人能告诉我怎么做吗?
谢谢你的帮助。

最佳答案

不能在SQL中运行Ruby方法因为这个逻辑很简单,你可以

where("amount_payable != ?", 0)

如果您的Ruby方法不能用纯SQL表示,那么唯一的方法就是获取所有记录,然后用Ruby过滤它们(这样效率会很低),如下所示:
all.select(&:payable?)

10-08 04:24