2012-02-01 9 views
0

저는 루비와 레일이 처음이에요.뒷쪽으로 연결할 수 없습니다.

나는 현재 3 개 모델 (게임, 경기, 선수, 사용자)

game.rb이

has_many :matches 

match.rb

belongs_to :game 
has_many :players 

player.rb

belongs_to :match 
belongs_to :user 

지금은 토스를 채우고 싶습니다. 전자적 연관성을 보여준다.

기본적으로 내가 무엇을 :

players_controller.rb

def create 
@game = Game.find(params[:game_id]) 
@match = @game.matches.find(params[:match_id]) 
@player = @match.players.create(params[:player]) 
@player.user = User.find(current_user.id) 
end 

을 그 후 내가보기에 전화를 걸

<%= @player.user.email %> 

는이 오류가 발생합니다 :

undefined method `email' for nil:NilClass 

내 질문에 나는 협회에서 거꾸로 잘못하는거야? 어떻게 든 가능해야합니다

+0

당신은 우리가 당신의 user.rb에 연관성을 보이지는 않지만, 그들은 다음과 같이 추측합니다 :'has_many : players' – Chazu

+0

그것의 사용자 1 : n 플레이어 관계. user.rb'has_many : players' – cschaeffler

답변

1

@player.user으로 지정하면 @player.save으로 전화해야합니다. 당신의 관계가 "거꾸로"있지 않다면, 데이터베이스의 변경 사항을 적용하기 위해 속성을 업데이트 한 후에 레코드를 저장하기 만하면됩니다.

현재 생성 방법은 @match.players.create(...)을 통해 새 플레이어를 만듭니다. 이것은 사용자의 player 개체가 데이터베이스에 마지막으로 기록 된 시간입니다. user 연결에 사용자를 할당하는 다음 줄은 절대로 저장되지 않습니다.

스타일에 대한 참고 사항 : current_player이 플레이어 개체 인 경우 이미 가지고있는 개체를 검색하는 대신 @player.user에 직접 할당해야합니다. 마지막 줄 :

@player.user = User.find(current_user.id) 

기록해야합니다

@player.user = current_user 
+0

는'@player.user = User.find (current_user.id)'뒤에'@ player.save'를 추가했으나 여전히 같은 오류입니다. – cschaeffler

+0

'@ player.save! '를 시도하고 오류가 발생했는지 확인하십시오. 하나 이상의 유효성 검사로 인해 플레이어가 생성되지 않을 수 있습니다. – meagar

+0

은'@player.user = User.find (current_user.id)'를'@player.user = current_user/.id'로 수정했습니다. 두 선수 모두'@ player.save! '를 사용해 보았습니다. 여전히 동일한 오류가 발생합니다 – cschaeffler

0

당신은 사용자 속성을 할당 한 후 @player.save가 누락되었습니다.

관련 문제