Как пропустить валидацию при использовании метода `validate`?

Я использую Ruby on Rails 3.2.9. Я реализовал настраиваемый валидатор и хотел бы пропустить проверки (при создании нового объект в файле миграции) при использовании метода validate. Обычно я могу использовать :without_protection => true в качестве параметра create!, но в моем случае (см. Код ниже) он, похоже, не работает: проверки не пропускаются.

class Article < ActiveRecord::Base
  validate do
    # custom validation code
  end
end

Как я могу пропустить проверки?


person Backo    schedule 14.12.2012    source источник


Ответы (2)


Вам нужно будет убедиться, что все остальные проверки отключены, чтобы это было эффективным. ActiveRecord не может выборочно отключать проверки, но может полностью их опустить.

Например:

class Article < ActiveRecord::Base
  validate :something,
    :if => :validations_are_turned_on?

  validate :always

protected
  def validations_are_turned_on?
    !@validations_disabled
  end
end

Пометка любых несущественных проверок соответствующим условием :if должна работать. В этом случае, если @validations_disabled не установлен, все проверки будут выполняться.

person tadman    schedule 14.12.2012
comment
В моем случае (при использовании блока validate do ... end ) есть ли способ избежать указания имени метода (как вы сделали с :something) и применения условия :if к блоку проверки? - person Backo; 15.12.2012
comment
Вы всегда можете объявить свою валидацию в режиме онлайн, используя блочный подход, но, на мой взгляд, это, как правило, добавляет беспорядка. Впрочем, все, что вам подходит. - person tadman; 16.12.2012

Без защиты не отключает проверки, он позволяет массово назначать защищенные атрибуты. Чтобы сохранить без проверки:

new_record = Article.new
new_record.save(:validate => false)
person Fiona T    schedule 15.12.2012