1

User モデルがあり、認証は has_secure_password によって提供されます。パスワード編集用に別のビューを実装したいと思います。

これを最もよく達成する方法について詳しく知ることができる適切なチュートリアルや学習リソースはありますか?

私の単純化されたモデル:

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

  before_save :create_remember_token

  validates :name, presence: true, length: { maximum: 50 }
  validates :email, presence: true, uniqueness: { case_sensitive: false }, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i }
  validates :password, :length => { :within => 6..40 }
  validates :password_confirmation, presence: true    
end

ユーザーが change_password ページを編集しているときにのみパスワードの検証が実行され、パスワードを編集するための別のページがあることを確認したいと思います。

edit_passwordやなどの新しいコントローラー アクションが必要だと思いますupdate_password。次に、次のようにしますvalidates :password, on: [:create, :update_password]

私は少し行き詰まっており、このテーマに関するサンプル コードまたはブログ投稿を閲覧したいと思っています。

4

2 に答える 2

2

次の場合にのみ検証を実行する場合

1.creating the new user
2.updating the password

条件付き検証に進むことができます。

class User < ActiveRecord::Base
  attr_accessor :update_password

  validates :password, :length => { :within => 6..40 }, :if => new_record? || update_password
  validates :password_confirmation, presence: true, :if => new_record? || update_password
end

また、コントローラーでupdate_passwordをtrueに設定する必要があります。

class PasswordsController < ActionController::Base

 def edit
   #You will render the password edit view here
 end

 def update
   @user = User.find(params[:id])
   @user.update_password = true
   @user.password = params[:password]
   @user.password_confirmation = params[:password_confirmation]
   if @user.save
      #success redirect here
   else
      render :edit
   end
 end

end

ご参考までに。

validates :password, on: [:create, :update_password]

ここで、:create、:update_passwordは、コントローラーのアクションを意味するのではなく、ユーザーオブジェクトのさまざまな状態を意味します。これには:create、:updateが含まれ、update_passwordは有効な状態ではありません。

于 2012-05-24T12:40:25.330 に答える
1

それを行う方法を学ぶための最良の方法は、デバイスのソースコード(または他の認証gem)を調べることだと思います。たとえば、パスワードコントローラー https://github.com/plataformatec/devise/blob/master/app/controllers /devise/passwords_controller.rb

于 2012-05-24T11:16:47.757 に答える