Поиск по принадлежащему - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь найти совпадение по двум командам, пробовал несколько синтаксисов, но ничего не помогает ...

Модель соответствует:

class Match < ApplicationRecord
  belongs_to :home, class_name: 'Team', foreign_key: :home_id
  belongs_to :away, class_name: 'Team', foreign_key: :away_id
end

Модель команды:

class Team < ApplicationRecord
  has_many :home_matches, class_name: 'Match', foreign_key: :home_id
  has_many :away_matches, class_name: 'Match', foreign_key: :away_id

  # Fields: name
end

Я пробовал что-то вроде этого:

 Match.includes(:home, :away).where(homes: { name: 'Germany' }, aways: {name: 'China'})

Ошибка:

ActiveRecord :: StatementInvalid (PG :: UndefinedTable: ОШИБКА: отсутствует FROM-предложение для таблицы "дома")

1 Ответ

2 голосов
/ 30 мая 2019

Опция 1.

Проверка в консоли Rails запроса puts Match.joins(:home, :away).to_sql.Вы можете получить результат как:

SELECT "matches".* FROM "matches" INNER JOIN "teams" ON "teams"."id" = "matches"."home_id" INNER JOIN "teams" "away_matches" ON "away_matches"."id" = "matches"."away_id"

Если это так, используйте запрос как

Match.joins(:home, :away).where(teams: { name: 'Germany' }, away_matches: {name: 'China'})

Вариант 2.

Попробуйте запрос как

Match.where(home: Team.where(name: 'Germany'), away: Team.where(name: 'China'))

Вы также можете заранее найти идентификаторы команд:

home_id = Team.find_by(name: 'Germany').id
away_id = Team.find_by(name: 'China').id
Match.where(home_id: home_id, away_id: away_id)
...