Rails 个具有单一 Table 继承和 HABTM 的模型
Rails models with Single Table Inheritance and HABTM
我有一个包含 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 关系有效,但一旦它属于游戏,我无法将 Team 变成 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
非常感谢任何帮助,谢谢。
尝试添加一个额外的模型 GameTeam 并使 has_many :through 关系
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 类型
实现方法的范围以回家或离开团队
我有一个包含 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 关系有效,但一旦它属于游戏,我无法将 Team 变成 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
非常感谢任何帮助,谢谢。
尝试添加一个额外的模型 GameTeam 并使 has_many :through 关系
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 类型
实现方法的范围以回家或离开团队