2011-02-09 14 views
5

Recientemente decidí que quería enumerar todos los users en mi aplicación Ruby On Rails, ya que no pude encontrar la manera de enumerarlos de otra manera, Decidí usar parciales. Tengo el siguiente en mi página de administración (simplemente conectado a un controlador de su propia administración):Ruby On Rails - "método indefinido 'id' para 4: Fixnum"

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

Entonces tengo un archivo llamado _user.html.erb en mis usuarios ver la carpeta. Este contiene lo siguiente:

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

Cuando se ejecuta la aplicación y yo vamos a la página de administración, me sale el siguiente error:

undefined method `id' for 4:Fixnum

Se dice que es porque de esta línea (que se encuentra en el parcial archivo):

<% div_for @user.object_id do %> 

estoy seguro de por qué sucede esto (y han buscado en Google durante horas para tratar de encontrar resultados y sólo encontrar soluciones que no funcionan para mí). Creo que tiene algo que ver con mi uso de la variable de instancia @user, pero no estoy del todo seguro.

Respuesta

8

Obtiene ese error porque div_for espera un objeto de registro activo como argumento, al que llama el método id. Pasa un fixnum (el resultado de @user.object_id), que no es un objeto de registro activo y no tiene un método id.

Pase en @user en lugar de @user.object_id y funcionará.

También debe usar user en lugar de @user, rails 3 ya no establece variables de instancia para los parciales.

+0

Usando @user me sale el error: "Identificación de Llamada nula, lo que erróneamente ser de 4 - si realmente quería el id de cero, utilice object_id" –

+0

@ Joesavage1: si está utilizando rails 3, debe usar 'user' en lugar de' @ user' (y si no lo está, debe usar 'user' de todos modos, ya que de esa forma funcionará con cualquier versión de rails). – sepp2k

+1

¡Muchas gracias! ¡Usar "usuario" en lugar de "@ usuario" funciona de maravilla! : D –

0

Pierde la parte .object_id. En serio, no puedo pensar por qué estás usando object_id. ¿Tienes una buena razón para hacerlo? De todos modos div_for envuelve un div alrededor de un objeto, ¡así que deja la parte .object_id!

+0

Al usar @user obtengo el error: "Id llamada para nulo, que erróneamente sería 4 - si realmente deseaba el id de nil, use object_id" –

+0

El @user entonces es nulo. Verifique su controlador nuevamente para establecer la variable de instancia @user.Supongo que no desea que @user sea nulo :) – Gerry

+0

Dado que es el usuario parcial, supuse que ya sabe lo que es @user. Como quiero pasar a través de los usuarios, seguramente ya debería saber qué es cada @user. Si necesito agregar algo en un controlador, qué controlador (usuarios o administración) –

0

en lugar del objeto que está utilizando es la columna o visa varsa que está utilizando en ese momento obtendrá este tipo de error.

Ejemplo

estoy usando ID en lugar de objeto de usuario = User.first.

0

Prueba esto, funcionó para mí.

@item.unit_of_measure.name 

en lugar de

@item.unit_of_measure_id.name 
Cuestiones relacionadas