пропустить некоторые проверки во время создания в рельсах, но запустить другие проверки - PullRequest
0 голосов
/ 24 февраля 2012

Я хочу пропустить проверки нескольких атрибутов при создании нового пользователя, таких как адрес, пин-код, номер телефона и т. Д.
Однако , он все равно должен выполнить другие проверки в модели, когда пользователь пытается отредактировать его. Я попытался использовать: on =>: update, но это мне не помогло. Какие-либо предложения ?

Мой код:

validates :address, :presence => true, :length => { :maximum => 50 }, :on => :update 
validates :city, :presence => true, :length => { :maximum => 50 }, :on => :update 
validates :state, :presence => true, :length => { :maximum => 50 }, :on => :update 
validates :zip, :presence => true, :numericality => true, :on => :update, :length => { :is => 5 }

Ответы [ 4 ]

5 голосов
/ 24 февраля 2012

Согласно документации , вам нужно сделать что-то вроде этого.Вы говорите, что это не работает?

class Person < ActiveRecord::Base
  validates_presence_of :address, :on => :update
  validates_presence_of :pin,     :on => :update
end
3 голосов
/ 24 февраля 2012

Процесс проверки при сохранении можно пропустить, передав :validate => false.

Обратите внимание, что при наличии ограничений базы данных вы все равно получите сообщение об ошибке. например если вы используете рельсовую миграцию и у вас есть :null => false, когда она создается (запустив миграцию), фактический столбец базы данных будет иметь это ограничение на уровне базы данных. Хорошая вещь, поскольку проверки должны быть в обоих местах. Способ переопределить ограничение db (т.е. вы не можете) - это миграция, чтобы фактически удалить ограничение.

2 голосов
/ 25 февраля 2012
validates :address, :presence => true,
                      :length => { :maximum => 50 },
                      :if => :address_changed?

  validates :city, :presence => true,
                   :length => { :maximum => 50 },
                   :if => :city_changed?

  validates :state, :presence => true,
                    :length => { :maximum => 50 },
                    :if => :state_changed?

  validates :zip,   :presence => true,
                    :numericality => true,
                    :length => { :is => 5 },
                    :if => :zip_changed?

Добавление if =>: attribute_changed?решит проблему.

2 голосов
/ 24 февраля 2012

При создании записи:

@model = Model.new(params[:model])
@model.save false

Это пропустит проверку.

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