3

私は二重の内部結合が必要な奇妙な状況があります。私は必要な質問を試みました、私はちょうどレールをする方法を知らない。ActiveRecordのhabtmとの二重結合

データ

  • アカウント(にhas_many:サイト)
  • サイト(HABTM:ユーザー、belongs_toの:アカウント)
  • ユーザー(HABTM:サイト)

がいることを無視します彼らはhabtmまたは何でも、私はそれらをhabtmまたはhas_many作ることができます:スルー。

私はその後、もちろん私は

@user.accounts < @some_other_account 

を行い、その後、user.sitesには、@持つことができるはずです

@user.accounts 

または

@account.users 

を行うことができるようにしたいです@some_other_accountのすべてのサイト。

私はhabtmとhas_many:を通していますが、私が望むことをするためにそれを得ることはできません。

基本的に私は(。phpMyAdminのからコピーテストおよび作品)は、このようなクエリで終わる必要があります。

SELECT accounts.* 
FROM accounts 
INNER JOIN sites ON sites.account_id = accounts.id 
INNER JOIN user_sites ON sites.id = user_sites.site_id 
WHERE user_sites.user_id = 2 

は、私がこれを行うことができますか?この二重結合を持つことも良い考えですか?私は、ユーザーがアカウントとの関連付けを開始してから、@ user.sitesを取得することを心配している方がうまくいくと思っていますが、それがそのまま維持されていると他の多くのものの方が効果的です(ユーザー< - サイト)。

答えて

3

私は、カスタムメソッドを作成して関連付けに取り入れようとするのではなく、これを最適化することをお勧めします。例えば。

未テストですが、HABTMまたはhas_many :throughアソシエーションのいずれかで動作するはずです。どのアプローチを使用するかに応じて、クエリで行うことができる最適化がいくつかあります。

いつか私たちは深くネストされたhas_many :throughのサポートを受けるかもしれませんが、これはこれのいくつかを処理します。

+0

ありがとう!スクリーンキャストが大好きです。 –

関連する問題