2012-01-27 2 views
4

내 문제의 예로 스포츠 게임이 있습니다. 스포츠 게임에는 홈 팀과 원정팀이라는 두 팀이 있습니다.레일스 연결 - 동일한 클래스에 대해 여러 개의 has_one 관계가 있습니다.

내가 예를 들어, 게임을 통해 팀에 액세스 할 수있게하려면
class Team < ActiveRecord::Base 

    belongs_to :game 

end 

class Game < ActiveRecord::Base 

    has_one :home_team, :class_name => "Team" 
    has_one :away_team, :class_name => "Team" 

end 

: Game.find (1)

을 .home_team하지만이 초기화되지 상수를 얻고 다음과 같이 내 활성 기록 모델은 오류 : 게임 :: 팀. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 감사,

+0

만약 팀'belongs_to : game'이라면 팀은 오직 한 게임 만 할 수 있습니다. 당신은 아마'has_many : games'를 원할 것입니다. – jlundqvist

답변

1

난 그냥 코드를 테스트하고 그것을 작동합니다.

내가 의심하는 것은 파일 이름이 잘못되었다는 것입니다.

  • game.rb
  • team.rb

하지 : 응용 프로그램/모델에 파일 이름이/있는지 확인

  • games.rb

    또는

  • teams.rb
1

귀하의 아키텍처가 실수 일 수 있습니다.

게임에서이 아키텍처로 팀을 구분할 수 없습니다.

그래서, cource이의

class Game < ActiveRecord::Base 

    has_many :teams 

    def home_team 
    teams.select { |team| team.home == self.stadium }.first 
    end 

    def away_team 
    teams.select { |team| team.home != self.stadium }.first 
    end 

end 

같은 그

rails g migration add_stadium_to_game stadium:integer 
rails g migration add_home_to_team home:integer 
rake db:migrate 

, 편집 "game.rb"와 같은 실행하시기 바랍니다 것은 한 예입니다, 그래서 당신의 목적을 실현하는 방법에는 여러 가지가 있습니다 .

7

Game has_one :team이면 Rails는 팀 테이블에 game_id 열이 있다고 가정합니다. 그래도 게임 테이블에 team_id 열이 있으면 원하는 경우 Game belongs_to :team을 사용합니다. 영어의 경우이 경우 역방향으로 들리지만 루비는 정확합니다.

조금 단순화했습니다. 당신은 다음과 같은 것을 원할 것입니다 :

class Team < ActiveRecord::Base 
    has_many :home_games, :class_name => "Game", :foreign_key => 'home_team_id' 
    has_many :away_games, :class_name => "Game", :foreign_key => 'away_team_id' 
end 

class Game < ActiveRecord::Base 
    belongs_to :home_team, :class_name => "Team" 
    belongs_to :away_team, :class_name => "Team" 
end 
관련 문제