下記が実装したい目標です
①ユーザー編集のときだけモデルに設定しているパスワードのバリデーションを解除し、
パスワード変更欄が空欄のままでもユーザー編集ができるようにする
②新規登録はバリデーション有効です
③deviseのコントローラーviewは使っていません
ユーザー編集画面で、nameは入力済み、パスワードと確認用パスワードは空白です。
その状態で更新すると、パスワードだけ入力してくださいメッセージが表示されます。
確認用パスワードは、バリデーション無視してくれているみたいです。
原因がわからず、教えていただけますと幸いです。
下記のように書いても、同じ結果になります。
validates :password,presence: true, on: :create
models.admin_user.rb class AdminUser < ApplicationRecord devise :database_authenticatable, :registerable, :validatable, :trackable, authentication_keys: [:login_id] VALID_PASSWORD_REGEX = /\A[a-z0-9]+\z/i.freeze validates :password, format: { with: VALID_PASSWORD_REGEX, message: 'は英数字記号で入力してください' }, allow_blank: true, on: :update validates :password, format: { with: VALID_PASSWORD_REGEX, message: 'は英数字記号で入力してください' }, on: :create validates :password_confirmation, presence: true, on: :create validates :password_confirmation, presence: true, allow_blank: true, on: :update validates :name, presence: true, length: { maximum: 250 } def update_without_current_password(params) if params[:password].blank? && params[:password_confirmation].blank? params.delete(:password) params.delete(:password_confirmation) end update(params) end end
_form.html.erb <div class="form-group col-sm-6"> <%= f.label :password %> <%= f.password_field :password, placeholder:"パスワードを入力してください"%> <%= f.error_message(:password) %> </div> <div class="form-group col-sm-6"> <%= f.label :password_confirmation %> <%= f.password_field :password_confirmation, placeholder:"パスワードを再入力してください"%> <%= f.error_message(:password_confirmation) %> </div>
controller.rb def update @user.update_with_password(user_params) if @user.valid? @user.save! redirect_to users_path else render action: :edit end end def set_user @user = User.find(params[:id]) end def user_params params.require(:user).permit(:name, :password, :password_confirmation) end
回答1件
あなたの回答
tips
プレビュー