0

두 가지 모델 인 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 

을 통해 :

답변

1

한 모델 추가 GameTeam을 추가하고 has_many을보십시오. GameTeam 유형에 따라 집 또는 부재 중 팀을 얻는 메소드 범위를 추가로 구현할 수 있습니다.