1

我有这堂课:

class Invoice < ActiveRecord::Base

  has_many :payments

  def payable?
    amount_payable != 0
  end

end

我怎样才能得到total所有人paymentsinvoice身份payable

class Payment < ActiveRecord::Base

  belongs_to  :invoice

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

end

问题似乎是该where子句只接受数据库列名而不接受类似payable?.

谁能告诉我该怎么做?

谢谢你的帮助。

4

1 回答 1

3

您不能在 SQL 中运行 Ruby 方法。由于这个逻辑很简单,你可以这样做

where("amount_payable != ?", 0)

如果您的 Ruby 方法不能用纯 SQL 表示,唯一的方法是获取所有记录,然后在 Ruby 中过滤它们(这将是低效的),如下所示:

all.select(&:payable?)
于 2013-05-19T11:17:25.350 回答