前提・実現したいこと
deviseを使用してユーザー機能をつけました。
そこで、パスワードに英数字8文字のバリデーションをかけたのですが、すると今度はユーザー編集ができなくなってしまいました。
該当のソースコード
パスワードのバリデーション(文字制限はdeviseの設定を変えています)
rails
1 VALID_PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i 2 validates :name, presence: true 3 validates :password, format: { with: VALID_PASSWORD_REGEX }
ユーザー編集のビュー(パスワードの入力フォームはありません)
rails
1<div class="account-page"> 2 <div class="account-page-title"> 3 アカウントの編集 4 </div> 5 <%= form_with model: current_user, local: true do |f|%> 6 <div class="account-page-form"> 7 <div class='field'> 8 <%= f.label "お名前" %> 9 <%= f.text_field :name, autofocus: true, class: 'field-input'%> 10 </div> 11 <div class='field'> 12 <%= f.label "メールアドレス" %> 13 <%= f.email_field :email, class: 'field-input'%> 14 </div> 15 <%= f.submit "保存する", class: 'btn'%> 16 <%= button_to "キャンセル", user_path(current_user),method: :get, class: "cancel" %> 17 </div> 18 <% end %> 19</div>
試したこと
https://github.com/heartcombo/devise/wiki/How-To:-Set-up-simple-password-complexity-requirements
こちらを参考に、以下のように編集したのですが、今度はバリデーションがかからなくなってしまいました。(編集はできます)
rails
1 2 validate :password_complexity 3 def password_complexity 4 return if password.blank? || password =~ /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i 5 end
また、バリデーションをかけなければユーザー編集は可能です。
まさかバリデーション をかけたら編集はできないなんてことはないと思うのですが、、。
ご存知の方いらっしゃいましたら原因などご教授いただけませんでしょうか。
補足情報(FW/ツールのバージョンなど)
rails 6.0
devise 4.7.2
エラー表記の追記
下記のバリデーションを設定し、英数字8文字以上のパスワードを用いて新規ユーザーを作成しました。(ここではちゃんと英字のみのパスワードは設定不可でした)
rails
1 VALID_PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i 2 validates :name, presence: true 3 validates :password, format: { with: VALID_PASSWORD_REGEX }
次にusersコントローラーのupdateアクションに!を追加してユーザー編集を行ったところ、
rails
1 def edit 2 end 3 4 def update 5 if current_user.update!(user_params) 6 redirect_to user_path(current_user) 7 else 8 render :edit 9 end 10 end 11 12 private 13 def user_params 14 params.require(:user).permit(:name, :email) 15 end
回答1件
あなたの回答
tips
プレビュー