96

Rails 4 では、has_many :through で :uniq => true を使用すると非推奨の警告が導入されました。例えば:

has_many :donors, :through => :donations, :uniq => true

次の警告が表示されます。

DEPRECATION WARNING: The following options in your Goal.has_many :donors declaration are deprecated: :uniq. Please use a scope block instead. For example, the following:

    has_many :spam_comments, conditions: { spam: true }, class_name: 'Comment'

should be rewritten as the following:

    has_many :spam_comments, -> { where spam: true }, class_name: 'Comment'

上記の has_many 宣言を書き直す正しい方法は何ですか?

4

2 に答える 2

5

Dylans の回答に加えて、モジュールとの関連付けを拡張する場合は、次のように (個別に指定するのではなく) スコープ ブロックでチェーンするようにしてください。

has_many :donors,
  -> { extending(DonorExtensions).order(:name).uniq },
  through: :donations

私だけかもしれませんが、スコープ ブロックを使用して関連付けプロキシを拡張するのは非常に直感的ではないようです。

于 2013-08-27T05:58:05.130 に答える