У меня странная ситуация, связанная с необходимостью двойного внутреннего соединения. Я пробовал запрос, который мне нужен, я просто не знаю, как заставить рельсы это делать.
Данные
- Аккаунт (has_many :sites)
- Сайт (habtm :users, own_to :account)
- Пользователь (habtm:sites)
Не обращайте внимания на то, что они habtm или что-то в этом роде, я могу сделать их habtm или has_many :through.
я хочу уметь делать
@user.accounts
or
@account.users
Тогда, конечно, я должен быть в состоянии сделать
@user.accounts < @some_other_account
А затем включите в @user.sites все сайты из @some_other_account.
Я возился с habtm и has_many :through, но не могу заставить его делать то, что я хочу.
В основном мне нужно получить такой запрос (скопировано из 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, но для многих других вещей это работает лучше, если оно сохраняется таким, как оно есть (пользователи ‹-> места).