2

ユーザーモデルとコントローラーがあり、ユーザーにはpassword、、、password_confirmationおよびpassword_digestフィールドがあります。bcryptルビーの宝石を使用しています。

ユーザーを作成するときに、上記のすべてのフィールドを指定すると、ユーザーが作成されます。ただし、ユーザーpasswordは保存されず、password_digestフィールドに 16 進形式で保存されます。

ユーザーの名前だけを編集したい場合、ユーザー編集フォームを開くと、フォームにフィールドがpasswordあり、password_confirmationフィールドが空です。したくないユーザーを保存するには、新しいパスワードを再度入力する必要があります。

attr_accessor役に立ちませんでした。

これが私のユーザーのコントローラーです:

   before_filter :authorize

   def create
    @user = User.new(user_params)
    if @user.valid?
     @user.password = params[:user][:password]
     @user.password_confirmation = params[:user][:password_confirmation]
     @user.save!
     redirect_to users_path
    else
     flash[:error] = @user.errors.full_message
     render :new
    end
   end

  def edit
   @user = User.find(params[:id])
  end

  def update
   @user = User.find(params[:id])
   if @user.update_attributes(user_params)
    redirect_to user_path
   else
    render 'edit'
    flash[:error] = @user.errors.full_messages
   end
  end

  private
  def user_params
   params.require(:user).permit(:first_name, :last_name, :emp_id, :email, :password, :password_confirmation)
  rescue
  {}
  end

ここに私のユーザーモデルがあります:

class User < ApplicationRecord
 rolify
 require 'bcrypt'
 has_secure_password
 # other field validations here....
 validates :password, presence: true
 validates :password_confirmation, presence: true
end

そして編集フォーム:

<%#= other fields here..... %>
<%= f.label :Password_for_this_portal %>
<%= f.password_field :password, :class=>"form-control" %>
<%= f.label :Confirm_passsword_for_this_portal %>
<%= f.password_field :password_confirmation, :class=>"form-control" %>
# ..... submit button here

ユーザー編集フォームでパスワードの変更を再度要求しない方法は?

4

1 に答える 1