Мне сложно получить список игр, связанных с иерархической родительской связью, когда несколько внешних ключей реализованы в отношении в середина.Как получить список из сложной активной записи has_many, участвующей в подмножестве нисходящих объектов
Учитывая лиги объекта NFC
, найти все его игровые объекты [G1,G3,G4]
# id :integer not null, primary key
# name :string
class League
has_many :teams
# has_many :games, :through => :teams (Is there some way to do this?)
end
# id :integer not null, primary key
# team_name :string
# league_id :integer
class Team
belongs_to :league
has_many :home_games, :foreign_key => team_a_id, :source => :game
has_many :away_games, :foreign_key => team_b_id, :source => :game
end
# id :integer not null, primary key
# game_name :string
# team_a_id :integer not null
# team_b_id :integer not null
class Game
belongs_to :home_team, :class_name => Team
belongs_to :away_team, :class_name => Team
end
Примеры данных:
LEAGUE - TEAM - GAME
---------------------------------
AFC -
PATRIOTS -
Home Away
G1(PATRIOTS vs DALLAS)
G2(PATRIOTS vs PITTSBURG)
PITTSBURG -
G2(PATRIOTS vs PITTSBURG)
NFC -
DALLAS -
G1(PATRIOTS vs DALLAS)
G3(DALLAS vs GREENBAY)
G4(DALLAS vs SEATTLE)
GREENBAY
G3(DALLAS vs GREENBAY)
SEATTLE
G4(DALLAS vs SEATTLE)
Ответ будет содержать совместимый ответ Rails 4. Особое внимание может быть уделено ответу RAILS 5, если альтернатива Rails 4 очень неэффективна.
nfc = League.where(name: 'NFC').first
# <answer>
puts nfc.games
## array containing objects [G1,G2,G3]
Задача Im имея с является home_team
/away_team
и объединение данных из внешних ключей.
Я настоятельно рекомендую вам уточнить свой вопрос. Кажется, вы задаете две разные вещи: как «получить список лиг, участвующих в подмножестве игр», и как «найти все игры, в которых есть команды NFC». Вы не объясняете, какие критерии составляют команду «NFC», а вместо этого показывают пример запросов к лигам с именем «NFC». – coreyward
Надеюсь, его разъяснили. – shadowbq
Было бы намного проще просто перечислить игры команды в одной ассоциации, а затем указать «home» как логическое значение. Т.е.: Команда 'has_many: games' - Домашние игры:' games.where (home: true) ' –