如何在Ruby on Rails中查找相关记录?

时间:2013-05-19 11:13:24

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord ruby-on-rails-3.2

我有这堂课:

class Invoice < ActiveRecord::Base

  has_many :payments

  def payable?
    amount_payable != 0
  end

end

如何获得totalpayments的所有invoice的{​​{1}}?

payable

问题似乎是class Payment < ActiveRecord::Base belongs_to :invoice def self.total where("invoices.payable? = ?", true).map(&:amount).sum end end 子句只接受数据库列名而不接受where之类的函数。

有人能告诉我怎么做吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

where("amount_payable != ?", 0)

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

all.select(&:payable?)