9

我想在 activerecord 关系上定义一个自定义方法,例如:

Transaction.all.summed_values

一个简单的例子是summed_values应该在哪里评估sum(:value)关系。

我应该在哪里定义方法summed_values?看起来应该是开启的ActiveRecord::Relation。如果它应该直接在那里,我应该把它放在哪个文件中?

另外,如果这个新方法只对Transactions有意义,有没有办法告诉rails只为由ActiveRecord::Relations组成的Transactions定义这个方法?

4

3 回答 3

13

self.summed_values直接在事务模型中创建方法。

于 2012-07-21T08:12:54.607 回答
4

你应该使用扩展

Transaction.all.extending do
  def summed_values
    sum(:what_you_want)
  end
end

更多信息:ActiveRecord::QueryMethods

于 2015-08-04T10:53:52.200 回答
1

是否有任何特定原因要创建此方法作为 ActiveRecord::Relation 的扩展?我会提出一个像这样的类方法:

class Transaction ...
  def self.summed_values(transactions=nil)
    if transactions.nil?
      all.sum(...)...
    else
      where(id => transactions).sum(...)...
    end
  end
end

这还具有仅可用于交易的优点。

于 2012-07-21T08:18:31.130 回答