9

Activerecord リレーションでカスタム メソッドを定義したい。

Transaction.all.summed_values

簡単な例は、リレーションsummed_valuesで評価する必要がある場所です。sum(:value)

メソッドはどこで定義すればよいsummed_valuesですか? オンにする必要があるようActiveRecord::Relationです。直接そこにある必要がある場合、どのファイルに入れる必要がありますか?

また、この新しいメソッドが s に対してのみ意味を持つ場合、 s で構成される sTransactionに対してのみこのメソッドを定義するようレールに指示する方法はありますか?ActiveRecord::RelationTransaction

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 に答える