3
0

More than 3 years have passed since last update.

Rails devise validationに引っかからない方法

Posted at

どうもチャンクノです!
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に関しては使用できる場面が決まっているので知らなかった人は調べてみるといいと思います。
それでは今日はこの辺で!

皆様よきプログラミングライフを🙏

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0