Rails 7에서 터보와 함께 Devise를 사용하는 방법

4690 단어 rubyrailsdevise
Rails 7에서 핫와이어의 터보는 양식 작업을 가로채서 유선을 통해 제출합니다.

현재 Devise gem은 이 작업을 지원하지 않으므로 제대로 작동하려면 약간의 조정이 필요합니다.

NB: 이 튜토리얼에서는 Devise gem을 이미 설치하고 구성했다고 가정합니다.

먼저 컨트롤러를 생성하겠습니다. 광산의 이름을 app/controllers/turbo_devise_user_controller.rb로 지정하겠습니다.

class TurboDeviseUserController < 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가 터보 및 렌더링 템플릿에 응답하도록 합니다. 그러나 물론 이것은 config/initializers/devise.rb에 있는 장치 초기화 프로그램을 수정하지 않고서는 발생하지 않습니다.

class TurboFailureApp < Devise::FailureApp
  def respond
    if request_format == :turbo_stream
      redirect
    else
      super
    end
  end

  def skip_format?
    %w(html turbo_stream */*).include? request_format.to_s
  end
end

 Devise.setup do |config|
  ...
  # Configure the parent class to the custom controller.
  config.parent_controller = 'TurboDeviseUserController'
  config.navigational_formats = ['*/*', :html, :turbo_stream]


  # Warden configuration
  config.warden do |manager|
    manager.failure_app = TurboFailureApp
  end

...
end


그게 다야! 이제 레일스 앱을 시작하고 코딩을 계속하세요!!.

좋은 웹페이지 즐겨찾기