Проверяет: наличие vs validates_presence_of с использованием рельсов 3
У меня есть пара простых моделей, которые связаны так:
Модели
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
В ПРОСМОТРЕ имеет такой вызов:
user.tasks
< - тогда я выполняю задачи
Проблема:
В модели задач -
когда я использую:
validates :name, :presence => true , :message => 'Name cannot be blank, Task not saved'
Я получаю ошибку 500:
ActionView::Template::Error (uninitialized constant User::Task):
NameError in View file
когда я использую:
validates_presence_of :name
Все работает.
Я думал, что оба метода проверки выше, где то же самое... проблема связана с ассоциациями и как валидация привязывается к связанным моделям. У меня есть подозрение, что что-то происходит с тем, как все связано, но это просто догадка.
Любая помощь будет оценена. Большое спасибо.
Ответы
Ответ 1
Когда вы используете новый формат validates :name
, вы можете поместить несколько проверок в одну строку, а не иметь несколько строк для каждого типа проверки. Из-за этого, когда Rails попадает в ваш параметр :message
, он считает его скорее методом проверки, чем сообщением, связанным с :presence
. Вместо этого попробуйте:
validates :name, :presence => {:message => 'Name cannot be blank, Task not saved'}
Кроме того, в зависимости от того, как вы показываете свои ошибки, эта ошибка может фактически отображаться как "Имя имени не может быть..."; Если это так, вы хотите, чтобы сообщение было просто "не может быть пустым, задача не сохранена".