ActiveRecord: как делать вложенные запросы по внешним ключам? - PullRequest
1 голос
/ 12 ноября 2011

У меня есть 3 модели: «Тренер», «Команда» и «Событие»

Событие имеет атрибуты away_team и home_team, обе из которых принадлежат Team.Команда принадлежит тренеру, и у тренера может быть много команд.

Я хотел бы найти все события, в которых home_team не тренируется конкретным тренером.Итак, что-то вроде:

Event.where("home_team.team.coach_id NOT ?", coach.id)

Проблема состоит в том, чтобы выяснить, как написать этот синтаксис.Я предполагаю, что мне нужно включить модель "команды", но я не уверен, как написать включение activerecord, которое соединяется через определенный внешний ключ.

Короче, любые идеи о том, как это сделатьбез получения ошибок SQL (которых у меня было бесчисленное множество на сегодня) было бы очень признательно.

Приветствия.

1 Ответ

1 голос
/ 12 ноября 2011

Если я правильно вас понимаю, вам нужен такой тип sql:

SELECT events.* FROM events JOIN team on events.home_team_id = teams.id WHERE teams.coach_id != coach_id

так в рельсах это должно выглядеть примерно так:

Event.joins("join teams on events.home_team_id = teams.id").where("teams.coach_id != ?", coach_id)

Конечно, я не знаю ваших точных имен таблиц, поэтому вы должны приспособить это решение к вашей проблеме.

Если у вас есть в ассоциации модели событий: belogns_to: home_team, вы можете использовать только объединения (: home_team) .where (....)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...