現在の Request が のサブクラス内で自動的に使用可能になるわけではありませんが、 への呼び出しに含めることでシリアライザーActiveModel::Serializerのハッシュに簡単に渡すことができます。optionsUserSerializer.new
次のようにシリアライザを明示的に作成する場合:
UserSerializer.new(@user, scope: current_user)
つまり、次の 2 番目のオプションを単純に渡すことができますrequest。
UserSerializer.new(@user, scope: current_user, request: request)
それ以降は、 を呼び出すことで、シリアライザーの現在の Request にアクセスできますoptions[:request]。たとえば、 内の現在のコントローラーを検査するにはUserSerializer、単純に の値を確認します。
options[:request].params[:controller]
のように表示される場合"devise/sessions"は、トークンを含めても問題ありません。それ以外の場合、標準の Devise コントローラーを使用してサインインを処理している場合は、おそらくサインインをサブクラスDevise::SessionsController化し、新しいコントローラーに再ルーティングする必要があります。
# app/controllers/sessions_controller.rb
class SessionsController < Devise::SessionsController
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, location: after_sign_in_path_for(resource), request: request
end
end
# config/routes.rb
devise_scope :user do
post "sign_in" => "sessions#create", as: :user_session
end
私はまだこれをテストしていないことに注意してください。のソースを読むとActionController::MimeResponds#respond_with、 に与えられたオプション#respond_withはレスポンダに下向きに渡されるActionController::Serializationように見えますが、レスポンダは によってハイジャックされ、オプションはのシリアライザにずっと渡されているようです。resource
幸運を!