2

私はこのようなモデルを関連付けました:

class Batch
  has_many :logs

class Log
  belongs_to :batch

インクルードを使用して、ログを含むバッチをロードしています。

b = Batch.includes(:logs)

どちらが2つ実行されるかは、期待どおりに選択されます(バッチとログ)。

それから私はします

b.first.logs.first.batch

これにより、実際に既にロードされている場合でも、バッチで別の選択がトリガーされます。include(:logs =>:batch)を実行して「修正」することを考えましたが、同じバッチが2回ロードされるため、ここで何かが間違っていると思います。何が得られますか?

4

1 に答える 1

1

これは:inverse_of設定で修正できます。これにより、ActiveRecordは2つの関連付けが互いに逆であることを認識できます。

class Batch
  has_many :logs, :inverse_of => :batch
end

class Log
  belongs_to :batch, :inverse_of => :logs
end
于 2012-12-28T21:38:58.203 に答える