0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

rendering_optionsが見つからない時の対処方法:Rails 7 + Devise + Turbo

Last updated at Posted at 2023-02-08

注意(2023/02/09追記)
こちらのDeviseのpull requestはTurboに対応し、マージされてDevise 4.9.0がリリースされたらこの記事のパッチは不要になります。

Rails 7 + Devise + Turboを使うには

Rails 7のアプリでDeviseとTurboを使った時のパッチをいくつかのところで見かけました:

【2023年版】Turboを有効化したままRails 7.0でDeviseを使う方法
Devise Auth Setup in Rails 7
How to use Devise with Hotwire & Turbo.js Discussion

こんな感じです:

app/controllers/turbo_devise_controller.rb
class TurboDeviseController < ApplicationController
  class Responder < ActionController::Responder
    def to_turbo_stream
      controller.render(options.merge(formats: :html))
    rescue ActionView::MissingTemplate => error
      if get?
        raise error
      elsif has_errors? && default_action
        render rendering_options.merge(formats: :html, status: :unprocessable_entity)
      else
        redirect_to navigation_location
      end
    end
  end

  self.responder = Responder
  respond_to :html, :turbo_stream
end

僕の会社のアプリで同じコードを実装し、普通にDeviseを使っていたものの...

エラー発生

いきなりCIが落ちる...

最後のコミットはコメントを消しただけなのに...

NameError: undefined local variable or method `rendering_options' for #<TurboDeviseController::Responder:0x00007f8ec49daaf8 ...

ということでIssueを作ったら先輩も同じ問題に遭遇し、原因はrespondersというgemのv3.1.0とのこと。

ちょっと調べた結果、バグが見つかったので対処法を書いておきます。

rendering_optionsの名前が変わった

rendering_optionsこちらのプルリクで追加されましたが、こちらのプルリクではそのrendering_optionserror_rendering_optionsに変わりました。それだけです!ということで、上のコードのrenderをこう書き換えたら動くはずです:

render error_rendering_options.merge(formats: :html, status: :unprocessable_entity)

以上。

0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?