2011-06-21 12 views
7

Estoy utilizando el código predeterminado creado por scaffolding. No he cambiado nada.undefined method model_name

Showing app/views/presences/_form.html.erb where line #1 raised: 
undefined method `model_name' for NilClass:Class 

1: <%= form_for(@presence) do |f| %> 
2: <% if @presence.errors.any? %> 
3:  <div id="error_explanation"> 
4:  <h2><%= pluralize(@presence.errors.count, "error") %> prohibited this presence from being saved:</h2> 

¿Qué hay de malo aquí? Nunca llamo a un método llamado "nombre_modelo" y este código es automático, entonces, ¿por qué no funciona?

Gracias

Respuesta

20

Trate de añadir esto a su presences_controller en el new u otra acción relevante que está prestando la forma:

#presuming your model is called Presence 
@presence = Presence.new 
+2

Gracias, eso funciona. Todavía estoy tratando de entender cómo funciona RoR, pero estos mensajes de error no son muy útiles. – Bv202

+0

usa el enlace de la persona que llama, y ​​la mejor gema de los errores - obtienes una consola en la ventana para la depuración. –

5

La vista (y el método form_for) esperar a tener realmente una presencia real modelo en la variable @presence. Se pasa una @ -variable como esta desde el controlador, lo que significa que debe configurarlo en la acción del controlador.

En el caso de la acción "nueva", no tiene un objeto de presencia existente con el que esté jugando (a diferencia, digamos "mostrar"), por lo que solo necesita configurar uno nuevo en blanco.

El método form_for tomará un objeto Presence como este y: si es uno existente de la base de datos, creará la ruta POST correcta para actualizarla. Pero si es una nueva, vacía, creará la ruta correcta para crear una nueva.

Espero que ayude ...