2011-02-22 17 views
23

Tengo un par de modelos simples que se asocia de este modo:valida: presencia frente a validates_presence_of utilizando los carriles 3

MODELOS

class Task < ActiveRecord::Base 
    belongs_to :user 
    validates :name, :presence => true, :message => 'Name cannot be blank, Task not saved' 
end 

class User < ActiveRecord::Base 
    has_many :tasks 
end 

vista tiene una llamada en él de este modo: user.tasks < - entonces yo bucle a través de las tareas

el Problema:

En el modelo de tarea -

Cuando uso:

validates :name, :presence => true , :message => 'Name cannot be blank, Task not saved' 

me sale un error 500:

ActionView::Template::Error (uninitialized constant User::Task): 
NameError in View file 

cuando uso:

validates_presence_of :name 

todo funciona.

Pensé que ambos validan los métodos anteriores donde el mismo ... es el problema que tiene que ver con las asociaciones y cómo la validación se relaciona con los modelos asociados. Tengo la corazonada de que algo está pasando con la forma en que se asocian las cosas, pero es solo una corazonada.

Cualquier ayuda será apreciada. Muchas gracias.

Respuesta

48

Cuando utiliza el formato validates :name más reciente, puede colocar varias validaciones en una línea en lugar de tener que tener varias líneas para cada tipo de validación. Debido a esto, cuando Rails golpea su parámetro :message, cree que es un método de validación en lugar de un mensaje asociado con :presence. Tal vez puedas probar:

validates :name, :presence => {:message => 'Name cannot be blank, Task not saved'} 

También, dependiendo de cómo mostrar sus errores, este error puede mostrar realmente como 'Nombre El nombre no puede ser ....'; si es así, querrá configurar el mensaje para simplemente 'no puede estar en blanco, tarea no guardada'.

+0

¡Muchas gracias! Eso hizo el truco! – RidingRails

+1

Tengo una pregunta sobre la internacionalización con respecto a esto. Si Rails proporciona el nombre del campo, ¿cómo puede este mensaje de error estar completamente localizado? Por ejemplo, en español, 'nombre' debe ser 'nombre'. ¿Hay alguna forma de suprimir el mensaje predeterminado por completo? – jn29098

+0

Sé que esta es una publicación anterior, pero ¿dónde debería aparecer este mensaje de error, y se muestra después de enviar el formulario, por ejemplo? gracias – Richlewis

Cuestiones relacionadas