두 가지 모델 인 Game and Team이있는 프로젝트가 있습니다. 게임에는 2 개의 팀, 원정 팀 및 홈 팀이 있습니다. 설정된 수의 팀이 있으며 더 이상 게임을 만들지 않습니다.단일 테이블 상속 및 HABTM이있는 레일 모델
@ game.teams.find_by_id (@ game.home_team_id) .first.name 대신 @ game.home_team.name을 할 수 있기를 원합니다. AwayTeam과 HomeTeam이라는 두 개의 추가 모델을 만들지 않고도 할 수 있는지는 잘 모르겠습니다. AwayTeam과 HomeTeam은 game_id 및 maybe : 유형을 제외하고 팀과 동일한 열을 갖습니다.
현재 게임과 팀 간의 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
어떤 도움을 올릴 때 고마워, 고마워. 그럼 당신은 모든 팀을 가져 game.teams을 할 수 있습니다 관계
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
을 통해 :