#ruby-on-rails #activerecord
#ruby-on-rails #activerecord
Вопрос:
У меня есть 3 модели: «Тренер», «Команда» и «Событие»
Событие имеет атрибуты away_team и home_team, оба из которых принадлежат Team. Команда принадлежит тренеру, а у тренера может быть много команд.
Что я хотел бы сделать, так это найти все события, где home_team не тренируется конкретным тренером. Итак, что-то вроде:
Event.where("home_team.team.coach_id NOT ?", coach.id)
Проблема заключается в том, чтобы выяснить, как записать этот синтаксис. Я предполагаю, что мне нужно включить модель «team», но я не уверен, как написать activerecord include, который присоединяется через определенный внешний ключ.
Короче говоря, я был бы очень признателен за любые идеи о том, как это сделать без ошибок SQL (которых у меня было бесчисленное количество сегодня вечером).
Приветствия.
Ответ №1:
Если я правильно вас понимаю, вам нужен такой sql:
SELECT events.* FROM events JOIN team on events.home_team_id = teams.id WHERE teams.coach_id != coach_id
итак, в rails это должно выглядеть примерно так:
Event.joins("join teams on events.home_team_id = teams.id").where("teams.coach_id != ?", coach_id)
Конечно, я не знаю ваших точных названий таблиц, поэтому вы должны подогнать это решение к вашей проблеме.
Если у вас есть в модели событий ассоциация: belogns_to: home_team, вы можете использовать только объединения (:home_team).где (….)