Authlogic: Как я могу проверить пароль только в том случае, если пароль обновляется? - PullRequest
2 голосов
/ 22 февраля 2011

Я использую authlogic с рельсами 3. У меня есть это в моей модели пользователя:

 validates :last_name, :presence => true

  acts_as_authentic do |c|
    c.validates_length_of_password_field_options = {:minimum => 7}
  end

А затем у меня есть действие контроллера, которое обновляет имя пользователя:

  def update_name
    if @current_user.update_attributes(params[:user])
      flash[:success_name] = true
      redirect_to edit_user_via_account_settings_path
    else
      render 'edit_user_via_account_settings'
    end
  end

Если пользователь вводит пустую фамилию и пытается обновить свое имя с помощью этого действия контроллера, модель @current_user правильно имеет ошибки в фамилии, но также имеет ошибки в пароле (пароль должен быть не менее 7 символов) , Как я могу подтвердить пароль только в случае его обновления?

Ответы [ 2 ]

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

Вам нужно использовать методы конфигурации merge_validates_ * вместо методов validates_ *. Первый сохраняет условия (например, игнорирует пустой пароль), а второй перезаписывает их. Это должно все прояснить. И не используйте присваивание в методах merge_ *.

a.merge_validates_length_of_password_field_options :minimum => 7 
1 голос
/ 22 февраля 2011

Я думаю, что конфигурация, которую вы ищете, находится здесь

http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/ActsAsAuthentic/Password/Config#ignore_blank_passwords-instance_method

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

...