現在、ユーザの認証管理にDeviseというgemを利用しています。
環境:MacOS rails5.2.2(Ruby 2.5.1) devise (4.6.2)※gem
【困っていること】
①userモデルに対して限定的なバリデーションを作成し、実行しても必ずemailとpasswordのバリデーションが走る。
例えば、以下のようなバリデーションを個別に作ったとします。
ruby
1 with_options on: :tel do | tel | 2 tel.validates :tel, 3 presence: true, 4 format: { with: /\A\d{10,11}\z/, message: 'の入力が正しくありません'} 5 end
上記に対して、update前にvalidを実行したいが為にコントローラに以下の記述をしました。
ruby
1def update_tel 2 3# バリデーションの為だけに一旦Userモデルをnew 4 @user = User.new 5 @user = params[:user][:tel] 6 7# バリデーションをかけて成功したらUpdateさせる 8 if @user.valid?(:tel) 9 @user.update(user_params) 10 else 11 render :XXX 12 return 13 end 14 15end 16
この結果、上記ifがfalseになります。
原因は簡単で、emailとpasswordがblankだからと言うエラーです。
【ご教示いただきたい内容】
① おそらくDeviseの基本機能でemailとpasswordを必ずチェックするようにしているためと思います。
このチェックをスキップすることはできないでしょうか?
② updateする前にバリデーションチェックをかけたい場合、わざわざnewするのは変な感じがします。
そもそものバリデーション方法として、どのようにするのが一般的なのでしょうか?
度々駄文をあげて、申し訳ございませんが、何卒よろしくお願いいたします。
あなたの回答
tips
プレビュー