現在の Request が のサブクラス内で自動的に使用可能になるわけではありませんが、 への呼び出しに含めることでシリアライザーActiveModel::Serializer
のハッシュに簡単に渡すことができます。options
UserSerializer.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
幸運を!