validates: присутствие против validates_presence_of с использованием rails 3 - PullRequest
23 голосов
/ 22 февраля 2011

У меня есть пара простых моделей, которые связаны следующим образом:

МОДЕЛЬ

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

В VIEW есть вызов: user.tasks <- затем я перебираю задачи </p>

Выпуск:

В модели задачи -

когда я использую:

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 Ответ

48 голосов
/ 22 февраля 2011

Когда вы используете более новый формат validates :name, вы можете поместить несколько проверок в одну строку вместо того, чтобы иметь несколько строк для каждого типа проверки.Из-за этого, когда Rails достигает вашего параметра :message, он считает, что это метод проверки, а не сообщение, связанное с :presence.Попробуйте вместо этого:

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

Кроме того, в зависимости от того, как вы отображаете свои ошибки, эта ошибка может фактически отображаться как «Имя не может быть ....»;если это так, вы захотите установить для сообщения значение «не может быть пустым, задача не сохранена».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...