2017-06-08 15 views
0

我々は2つのARモデルを持っていると仮定しましょう:ActiveRecordで2つの結合モデルを関連付ける方法は?

class User < ApplicationRecord 
    has_many :proposals 
    has_many :concerns 
end 

class Job < ApplicationRecord 
    has_many :proposals 
    has_many :concerns 
end 

提案と懸念は、両方のユーザーとジョブの間のモデルに参加している:

class Proposal < ApplicationRecord 
    belongs_to :user 
    belongs_to :job 
end 

class Concern < ApplicationRecord 
    belongs_to :user 
    belongs_to :job 
end 

私が解決しようとしている何を提案し、懸念を通じ関連付ける方法でありますユーザーと仕事の両方。私。私は、イーガーローディングなどを使用したい:

proposals.preload(:concerns).map do |proposal| 
    # proposal.concerns are preloaded here 
    # and all concerns have same user and job 
end 

私の現在のソリューションは、懸念の上にルックアップconcerns方法だけで簡単です - N + 1つのクエリを実行しますので、それは無効です。

参加するモデルのいずれかに冗長な外部キーを追加しないようにしたいと考えています。

答えて

0

これは、1 + Nを避けるべきではありません

Proposal.includes(user: :concerns).where(condition: 123) 
+0

を照会し、これらの懸念は、すべてのジョブに関連付けられているすべてのユーザーの懸念を含むであろう。 – MikDiet

+0

次に、 'jobs'に条件を追加してみることができます –

+0

正確に何をしたいですか? –

関連する問題