Допустим, у меня есть футбольный матч, в котором будут участвовать две команды: одна - «хозяева поля», а другая - «команда гостей».
Итак, в БД таблица "совпадений" у меня есть:
home_team_id - integer column
away_team_id - integer column
В классе Match области действия:
belongs_to :team_home, foreign_key: :home_team_id, class_name: 'Team'
belongs_to :team_away, foreign_key: :away_team_id, class_name: 'Team'
Какую коррент-ассоциацию нужно поместить в класс команды, чтобы я мог получить все матчи команды, как домашние, так и выездные?





это одно из возможных решений
class Team < ActiveRecord::Base
has_many :home_matches, class_name: "Match", foreign_key: "home_team_id"
has_many :away_matches, class_name: "Match", foreign_key: "away_team_id"
def myMatches
Match.where("home_team_id = ? OR away_team_id = ?", self.id, self.id)
end
end
class Match < ActiveRecord::Base
belongs_to :home_team, class_name: "Team", foreign_key: "home_team_id"
belongs_to :away_team, class_name: "Team", foreign_key: "away_team_id"
end
это единственное возможное решение, присоединение - другое - в myMatches вы можете получить все совпадения для команды - в чем был вопрос
Спасибо, Ричи. А как насчет условия «ИЛИ»? Он будет производительным в случае миллиона записей, или, может быть, будет предпочтительнее новая таблица соединения, например team_matches со столбцами team_id и match_id (2 строки на 1 матч)?