2014-11-19 13 views
6

Non riesco a ottenere il valore id da un modello.metodo non definito `id 'per # <ActiveRecord :: Relazione []>

Il mio codice:

session["game_space"] = params[:game_space_id] 

@player_space = PlayerSpace.where(game_space_id: session["game_space"], user_id: current_user.id) 

session["player_space"] = @player_space.id #<<<<===== The error occurs here 

redirect_to "show",:id => @player_space.id 

Messaggio di errore:

Error: undefined method `id' for #<ActiveRecord::Relation []> 

mi potete aiutare su questo?

risposta

10

problemi:

  • clausola Where ritorna oggetto relazione record attivo che è una sorta di array (raccolta). Quindi devi scegliere l'oggetto per chiamare il metodo id su di esso.

    @player_space = PlayerSpace.where (game_space_id: sessione [ "game_space"], user_id: current_user.id) .Prima

  • i risultati della query/raccolta non ha alcuna riga/oggetto. Quindi chiamare #first restituirà zero. Di conseguenza, nil#id causerà nuovamente l'errore.

auguro che si ottiene il punto!

+1

Se vi aspettate di ottenere un record, è anche accettabile per rinunciare al dove e fare find_by – DVG

+1

Se vi aspettate per ottenere un record, è anche accettabile rinunciare al dove e trovare find_by: 'PlayerSpace.find_by (game_space_id: session [: game_space], user_id: current_user.id)' – DVG

+0

Non l'ho usato. primo perché ho solo una riga. Ora, ho messo prima e l'errore si verifica ancora. Nota: se provo: session ["player_space"] = @ player_space.name funziona. Quindi, spero di non poter accedere all'ID ... davvero non lo so. –

2

Si sta tentando di ottenere un id su un rapporto ActiveRecord. Prova questo:

@player_space = PlayerSpace.where(game_space_id: session["game_space"], user_id: current_user.id).first

quindi ottenere l'id di @player_space

2

Stai ottenendo una classe ActiveRecord::Relation indietro, non un oggetto modello. Puoi ottenere l'ID da un oggetto nella relazione. Se si è certi che si sta andando ad ottenere esattamente un articolo indietro, si può semplicemente fare:

PlayerSpace.where(game_space_id: session["game_space"], user_id: current_user.id).first 
Problemi correlati