我有一个项目有2个模型,游戏和团队。一场比赛有两支球队,一支客场球队和一支主场球队。有一定数量的团队(不再创建),每个团队都属于许多游戏。
我希望能够使用@ game.home_team.name而不是@ game.teams.find_by_id(@ game.home_team_id).first.name。我不确定我是否可以在不创建另外两个模型AwayTeam和HomeTeam的情况下做到这一点,它们将与Team相同的列除了额外的:game_id并且可能:type。
目前,游戏和团队之间的HABTM关系有效,但一旦属于游戏,我无法将团队变成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
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
尝试添加一个额外的模型GameTeam并制作has_many:通过关系
class GameTeam
belongs_to :game
belongs_to :team
validates :team_type, presence: true
end
class Game
has_many :game_teams
has_may :teams, through: :game_teams
end
然后你可以制作game.teams来获取所有团队。您还可以通过GameTeam类型
实现方法范围以回家或离开团队