3

Ruby on Rails v3.2.2 を使用していますが、mixin モジュールでアクティブ レコード アソシエーションを宣言するのが有効な方法であるかどうかを知りたいです。なんで?

もっと:

  1. このアプローチの長所と短所は何ですか?
  2. 何か気をつけることはありますか?
  3. それを作るための処方箋はありますか?

: アクティブ レコード アソシエーションに関連するステートメントは複数のモデルで同じであるため、コードを DRY (Don't Repeat Yourself) したいと考えています。

4

2 に答える 2

0

あなたはそれを行うことができますが、ブロックでそれを行うことに注意する必要がありますincluded do...end.

私の意見では、DRY ではなく、動作をカプセル化するためだけであっても、モデルのコードを独立したモジュールに分離することは非常に価値があります。

于 2012-10-03T13:49:20.803 に答える
0

さあ、やってみよう!ご質問について:

  • 1 について: 最大の利点は、重複したコードのないクリーンなコード ベースを使用できることです。私が考えることができる最大の欠点は、あなたのコードを見ている人にはすぐにはわからないかもしれないということです.

  • included3 に関して:コールバックで、または新しいActiveSupport::Concern拡張機能を使用して関連付けを定義する必要があります。

例:

# using the standard include callback
module LocationAwareness

  def self.included(base)
    base.has_one :location
  end
end

また

# using ActiveSupport::Concern
module LocationAwareness
  extend ActiveSupport::Concern

  included do
    base.has_one :location
  end
end

次に、次のようにモデルで使用できます。

class Person < ActiveRecord::Base
  include LocationAwareness
end

class Gig < ActiveRecord::Base
  include LocationAwareness
end

#...

もちろん、このアプローチは、「単なる」関連付けよりも多くの行動を共有している場合、さらに理にかなっています...

于 2012-10-03T15:46:04.997 に答える