Rails devise validationに引っかからない方法
どうもチャンクノです!
deviseを使用するとUserモデルを更新したりする場合必ずパスワードのparamsを送らなければいけません。
ですが、deviseのメソッドをオーバーライドすることでパスワードをparamsから省くことができます。
この方法はググればすぐに出てきますが、もしUserモデルにパスワードのバリデーションをかけていた場合paramsから省いていたとしても一生登録できません。
自分は原因に気付くまで二日かかりました。まさかvalidationだなんて思わんて、、、。
同じ問題に直面している泣きそうな人たちの救いになればと思い、今回validationに引っかからずに登録する方法を記事にします。
paramsから省く記事はこちらを参考にしました。
https://easyramble.com/user-account-update-without-password-on-devise.html
本題の内容はUser.rbに以下を記述するだけです。
def update_without_current_password(params)
params.delete(:current_password)
self.attributes = params
result = self.save(validate: false) <- 具体的にはここ。
clean_up_passwords
result
end
一応説明しておくとここでいうselfっていうのはUserのことです
attributesっていうのはnewとかbuildとかと同じ感じのものらしいです。
なので、self.attributes == User.new と同じことになると思います。
で、saveする時にvalidationを効かなくすると。
これでOKです。
自分はdeviseのパスワードを省く方法すら知らなかったのでお勉強になりました。
validate: falseに関しては使用できる場面が決まっているので知らなかった人は調べてみるといいと思います。
それでは今日はこの辺で!
皆様よきプログラミングライフを🙏
Author And Source
この問題について(Rails devise validationに引っかからない方法), 我々は、より多くの情報をここで見つけました https://qiita.com/kt215prg/items/b56b8215c08a5f49db21著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .