Проверка на отсутствие атрибутов в update_attributes - PullRequest
1 голос
/ 19 августа 2011

Вопрос очень прост, проверяет ли update_attributes каждую возможную проверку модели, даже если я не хочу обновлять некоторые атрибуты?

У меня есть вид редактирования, где пользователь может изменить свой пароль, но только если он его пропустит, т. Е. Если он пуст, пароль не изменится.

Итак, я делаю следующее в контроллере:

def update
    params[resource_name].delete(:password) if params[resource_name][:password].blank?
    params[resource_name].delete(:password_confirmation) if params[resource_name][:password_confirmation].blank?
    params[resource_name].delete(:current_password) if params[resource_name][:current_password].blank?
    if resource.update_attributes(params[resource_name])
        ...
    end
end

Я определил следующую проверку для модели:

validates :password,
          :length => { :within => 6..40 }

Поэтому, когда я использую обновление вызова, я получаю сообщение о том, что пароль слишком короткий

Пс .: Я использую Devise, чтобы справиться с этим.

РЕДАКТИРОВАТЬ: Кто-нибудь из вас знает, есть ли у Devise какие-либо проверки пароля? Потому что я удалил проверку, и она работала правильно, но если я ввел короткий пароль, он все равно показывает проверку, говоря, что она слишком коротка.

1 Ответ

6 голосов
/ 19 августа 2011

Да, Devise предоставляет проверки пароля, если вы передали: проверяется методом devise в вашей модели.Конфигурация по умолчанию для длины пароля - 6..128.Вы можете переопределить это в config / initializers / devise.rb (около строки 101).

Вы можете удалить: validatable из вашей модели и написать свои собственные проверки, если хотите.Если вы делаете это и не хотите, чтобы проверка выполнялась, если пароль не передан в update_attributes, то сделайте что-то вроде этого:

validates :password, :presence => true, :if => lambda { new_record? || !password.nil? }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...