Conversation と Phones の 2 つのモデルがあり、どちらも互いに has_and_belongs_to_many です。電話は多くの会話を持つことができ、会話は多くの電話 (2 つ以上) を持つことができます。
class Conversation < ActiveRecord::Base
has_and_belongs_to_many :phones
end
class Phone < ActiveRecord::Base
has_and_belongs_to_many :conversations
end
もちろん、conversations_phones 結合テーブルもあります。
2 つ以上の電話オブジェクトがある場合、それらが共有するすべての会話のリストを見つけるにはどうすればよいですか? 問題点: 会話に他の電話を含めることはできません (つまり、電話 ID の数は、検索に使用した数と同じです)。
私は純粋なRailsでそれを行うことができましたが、すべての会話をループし、データベースを頼りにする必要があります. 良くない。
純粋な SQL を実行してもかまいません。モデル ID を使用すると、インジェクション攻撃を阻止するのに役立ちます。
私が来た最も近いものは次のとおりです。
SELECT conversations.* FROM conversations
INNER JOIN conversations_phones AS t0_r0 ON conversations.id = t0_r0.conversation_id
INNER JOIN conversations_phones AS t0_r1 ON conversations.id = t0_r1.conversation_id
WHERE (t0_r0.phone_id = ? AND t0_r1.phone_id = ?), @phone_from.id, @phone_to.id
ただし、外部の電話との会話も含まれます。私は GROUP BY と HAVING COUNT が役立つと感じています。私は SQL に慣れていません。