サブドメイン間で共有可能なセッションを必要としない解決策は、メッセージをリクエストパラメータとして送信することです。
# application_controller.rb
class ApplicationController
before_action :handle_cross_domain_flash_messages
def handle_cross_domain_flash_messages
flash.alert = params[:alert] if params[:alert]
flash.notice = params[:notice] if params[:notice]
end
end
:alert
これで、またはparamsを使用して任意のパスを使用して:notice
、フラッシュメッセージを設定できます。
# example path
'/?alert=Hello+World'
# example controller
class PagesController
def redirect_with_message
redirect_to root_path(notice: 'Hello world')
end
end
ただし、これを行うと、ブラウザのアドレスバーにパラメータが残ります。個人的には、アドレスバーの超長いアドレスは好きではありません。目的のフラッシュメッセージを取得しながらアドレスバーからパラメータを削除する方法は、リダイレクトすることです。
# application_controller.rb
class ApplicationController
before_action :handle_cross_domain_flash_messages
def handle_cross_domain_flash_messages
return unless params[:alert] || params[:notice]
redirect_to request.path, alert: params[:alert], notice: params[:notice]
end
end
ステップバイステップの説明:
3番目のコードブロックからのコントローラーアクションは、にリダイレクトし'/?notice=Hello+world'
ます。
はhandle_cross_domain_flash_messages
、フラッシュメッセージがパラメータを通過したことを確認し、別のリダイレクトを引き起こし、与えられたフラッシュメッセージを渡します。
リダイレクトは'/'
、ブラウザのクリーンパスである今に移動します。フラッシュメッセージはページにあります。
追加のリダイレクトが必要でしたが、グローバルセッションは使用されませんでした。