4

作業中のアプリで、言語Cookieを設定し、最後のURLにリダイレクトするためのアクションを作成した状況に遭遇しました。このようなもの:

def language
  cookies[:locale] = {:value => params[:locale], :domain => APP_DOMAIN}
  redirect_to_back
end

物事は、私はこれにあまり満足していません。エンドポイントの全体的な目的はサーバー側でアプリに新しい言語を設定することであるため、この超軽量ロジックは、実際にコントローラーに到達する前にミドルウェアスタック全体に詰まり、ワークフローのパフォーマンスを低下させます。しかし後で、ルートマッパー(http://guides.rubyonrails.org/routing.html#redirection)から直接リダイレクトできることを知り、すべての問題の解決策を見つけたと思いました。

match "language/:locale" => redirect {|p, req| req.cookies["locale"] = {:value => p[:locale], :domain => APP_DOMAIN} ; req.referrer || '' }

問題は、リクエストにアクセスできるため、Cookieを挿入できる場合でも、リダイレクトブロックの最後の値のみがリダイレクト応答を形成するために使用されることです。これはリクエストをチェックせず、それに応じてそのCookie(またはそれ以上のもの)を設定します。そうですね、問題は、宛先ルートを通過するよりも、route.rbリダイレクトに影響を与える方法を知っている人はいますか?

いいえ、クライアント側のソリューションは必要ありません。私はJSでもこれを実行できることを十分に認識しており、JSなしのソリューションが必要でした。

前もって感謝します

4

1 に答える 1