【发布时间】:2015-02-03 15:57:09
【问题描述】:
我有一个包含 2 个模型的项目,游戏和团队。一场比赛有两支球队,一支客队和一支主队。有一定数量的团队(不再创建),每个团队都属于许多游戏。
我希望能够使用@game.home_team.name 而不是@game.teams.find_by_id(@game.home_team_id).first.name。我不确定是否可以在不创建两个额外模型(AwayTeam 和 HomeTeam)的情况下做到这一点,除了额外的 :game_id 和可能的 :type 之外,它们将具有与 Team 相同的列。
目前,Games 和 Teams 之间的 HABTM 关系有效,但一旦 Teams 属于 Game,我无法将其变成 HomeTeam 或 AwayTeam。
game.rb
class Game < ActiveRecord::Base
has_and_belongs_to_many :teams
has_one :away_team, -> {where(type:'away')}, class_name: 'Team'
has_one :home_team, -> {where(type:'home')}, class_name: 'Team'
end
team.rb
class Team < ActiveRecord::Base
has_and_belongs_to_many :games
# has_many :away_teams
# has_many :home_teams
end
###
# class AwayTeam < Team
# belongs_to :game
# belongs_to :team
# end
# class HomeTeam < Team
# belongs_to :game
# belongs_to :team
# end
games_controller.rb
def create
@game = Game.create(game_params)
@game.teams << Team.find_all_by_id([ @game.away_team_id, @game.home_team_id ])
@game.away_team = @game.teams.find_by_id(@game.away_team_id)
@game.home_team = @game.teams.find_by_id(@game.home_team_id)
@game.save
end
任何帮助将不胜感激,谢谢。
【问题讨论】:
标签: ruby-on-rails ruby relationships single-table-inheritance