Rails3 / Mongoid Validations не работает - PullRequest
0 голосов
/ 07 декабря 2011

В моем приложении кажется, что проверки ActiveModel вообще не выполняются. То есть они всегда возвращают true (действительный) независимо от того, насколько недействительными на самом деле являются данные.

class QueueItem
  include Mongoid::Document
  include Mongoid::Timestamps

  belongs_to :user

  field :appointment_time, type: DateTime, allow_nil: true
  field :notes, type: String, allow_nil: true
  # field :position, type: Integer, default: 0

  validates :user, presence: true, allow_blank: false, allow_nil: false
  validates_length_of :notes, :minimum => 2, allow_blank: false
end

Затем, когда вы пытаетесь сохранить или проверить запись с неверными данными, вы получите следующее:

ruby-1.9.2-p290 :028 > QueueItem.validators
 => [#<ActiveModel::Validations::PresenceValidator:0x007f8303adb190 @attributes=[:user], @options={:allow_blank=>false, :allow_nil=>false}>, #<ActiveModel::Validations::LengthValidator:0x007f8303ee5a60 @attributes=[:notes], @options={:minimum=>2, :allow_blank=>false}>] 
ruby-1.9.2-p290 :029 > qi = QueueItem.new
 => #<QueueItem _id: 4edf5a0535be359a79000004, _type: nil, created_at: nil, updated_at: nil, user_id: nil, appointment_time: nil, notes: nil, called: false, visited: false, rejected: false> 
ruby-1.9.2-p290 :030 > qi.notes = "x"
 => "x" 
ruby-1.9.2-p290 :031 > qi.valid?
 => true 

Кажется, что проверки действительно регистрируются в модели, как показано QueueItem.validations. Почему же они всегда возвращают истину? Это происходит не только в этой модели, но и во всех моделях моего приложения.

UPDATE

Я добавил пользовательский валидатор, и он успешно запускается.

validate :test_validation

def test_validation
  logger.info ":test_validation has fired"
  self.errors[:base] << "Something is royally screwed!"
end

Теперь, когда я звоню model.valid?, он возвращает false, и регистратор выводит это сообщение. Пользовательский валидатор фактически добавляет ошибки к объекту и возвращает false. До сих пор не ясно, почему стандартные ActiveModel не выполняются. Есть ли способ отследить это?

1 Ответ

1 голос
/ 07 декабря 2011

Итак, оказалось, что в файле locals/en.yml в разделе errors: была поврежденная строка.

...