0

アカウント作成用の検証パスワードを持つアプリがあります。ただし、ユーザーがパスワードを更新する場合、すべての検証が無視されます。

ユーザーコントローラー

    class User < ActiveRecord::Base
      attr_accessible :email, :password, :password_confirmation, :name,

      attr_accessor :password
      before_save :encrypt_password
      before_save { |user| user.email = email.downcase }
      before_save { |user| user.name = name.downcase }
      before_create { generate_token(:auth_token) }
      before_create { generate_token(:email_token) }

      VALID_PASSWORD_REGEX = /^(?=.*[a-zA-Z])(?=.*[0-9]).{6,}$/
      validates_confirmation_of :password
      validates :password, :on => :create, presence: true, format: { with: VALID_PASSWORD_REGEX }
      validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
      validates :name, presence: true, format: { with: VALID_NAME_REGEX }, uniqueness: { case_sensitive: false }, length:  { minimum: 4 }

そのため、削除しようとしまし:on => :create, たが、ログインすると、パスワードが無効であるというエラーが表示されます。だから許さない@user.save!

ユーザーコントローラー

  def update
    if @user.update_attributes(params[:user])
      redirect_to @user
    else
      render "edit"
    end
  end
4

3 に答える 3

2

次のようなことを試してください:

validates :password, :presence => {:on => :create}, :confirmation => true, format: { with: VALID_PASSWORD_REGEX }

あなたが書いた方法は、作成時にすべてを実行し、更新を完全に除外すると思います

于 2013-06-17T23:37:27.560 に答える