J'ai une situation étrange impliquant le besoin d'une jointure interne double. J'ai essayé la requête dont j'ai besoin, je ne sais pas comment faire des rails.Double jointure avec habtm dans ActiveRecord
Les données
- compte (has_many: Sites)
- Site (HABTM: utilisateurs, belongs_to: compte)
- utilisateur (HABTM: Sites)
Ignore que ils sont habtm ou peu importe, je peux les faire habtm ou has_many: à travers.
Je veux être capable de faire
@user.accounts
ou
@account.users
Alors bien sûr, je devrais pouvoir faire
@user.accounts < @some_other_account
Et ont ensuite @ user.sites comprennent tous les sites de @some_other_account. J'ai tripoté avec habtm et has_many: à travers mais je ne peux pas l'obtenir pour faire ce que je veux.
Fondamentalement, je dois finir avec une requête comme celui-ci (copié à partir phpmyadmin testé et fonctionne.):
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
Puis-je faire cela? Est-ce même une bonne idée d'avoir cette double jointure? Je suppose que cela fonctionnerait mieux si les utilisateurs avaient l'association avec les comptes pour commencer, et ensuite s'inquiéter d'obtenir @ user.sites à la place, mais cela fonctionne mieux pour beaucoup d'autres choses si elle est maintenue comme elle est (utilisateurs < -> des sites).
Merci! J'adore les screencasts btw. –