2011-02-09 16 views
5

Recentemente ho deciso di voler elencare tutti gli users nell'applicazione Ruby On Rails - poiché non riuscivo a capire come elencarli in un altro modo, Ho deciso di usare partial. Ho il seguente sulla mia pagina di amministrazione (solo collegato ad un proprio controller amministrazione):Ruby On Rails - "metodo non definito 'id' per 4: Fixnum"

<%= render :partial => User.find(:all) %> 

Ho poi un file chiamato _user.html.erb nei miei utenti visualizzano la cartella. Questo contiene quanto segue:

<ul> 
<% div_for @user.object_id do %> 
    <li><%= link_to user.username, user.username %></li> 
<% end %> 
</ul> 

Quando l'applicazione viene eseguita e vado alla pagina di amministrazione, ottengo il seguente errore:

undefined method `id' for 4:Fixnum

E dice che è a causa di questa linea (che è nel parziale file):

<% div_for @user.object_id do %> 

non sono sicuro perché questo accade (e googled per ore per cercare di trovare i risultati e trovare solo soluzioni che non funzionano per me). Penso che sia qualcosa a che fare con il mio utilizzo della variabile di istanza @user, ma non ne sono completamente sicuro.

risposta

8

Si ottiene questo errore perché div_for prevede un oggetto record attivo come argomento, su cui chiama il metodo id. Si passa a un fixnum (il risultato di @user.object_id), che non è un oggetto record attivo e non ha un metodo id.

Quindi passare @user anziché @user.object_id e funzionerà.

Inoltre, è necessario utilizzare user anziché @user, rails 3 non imposta più variabili di istanza per i partial.

+0

Utilizzando @user ottengo l'errore: "id per nil Called, che sarebbe erroneamente essere 4 - se si voleva davvero l'id pari a zero, utilizzare object_id" –

+0

@ Joesavage1: Se stai usando rails 3, devi usare 'user' invece di' @ user' (e se non lo sei, dovresti comunque usare 'user' perché in questo modo funzionerà con qualsiasi versione di rails). – sepp2k

+1

Grazie mille! Usare "utente" invece di "@user" funziona bene! : D –

0

Perdere la parte .object_id. Non posso seriamente pensare perché stai usando object_id! Hai una buona ragione per farlo? Comunque div_for avvolge un div attorno ad un oggetto, quindi lascia la parte .object_id!

+0

Utilizzo di @user Ho ricevuto l'errore: "Chiamato id per nil, che sarebbe erroneamente 4 - se si voleva realmente l'id di nil, utilizzare object_id" –

+0

L'utente @ è quindi nullo. Controlla di nuovo il controller per impostare la variabile di istanza @user.Immagino che tu non voglia che @user sia zero :) – Gerry

+0

Dato che è l'utente parziale, ho pensato che sappia già cosa sia @user. Dal momento che voglio passare in rassegna gli utenti, sicuramente dovrebbe già sapere cosa sia ciascun @user? Se devo aggiungere qualcosa in un controller - quale controller (utenti o amministratore) –

0

invece dell'oggetto che si sta usando colonna o visa varsa che si sta utilizzando in quel momento si otterrà questo tipo di errore.

Esempio

Sto usando id invece oggetto utente = User.first.

0

Prova questo, ha funzionato per me.

@item.unit_of_measure.name 

invece di

@item.unit_of_measure_id.name 
Problemi correlati