2012-07-19 28 views
4

我剛剛遇到了我正在工作的應用程序中的一種情況,我在其中編寫了一個專門用於設置語言cookie並重定向到最後的網址。類似這樣的:在Rails 3中,如何在設置Cookie時直接從路由中重定向

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(或其他可能存在的內容)。所以是的,問題是,有沒有人知道影響route.rb重定向的方法比通過目標路由多一點?

不,我不想要客戶端解決方案。我完全知道我也可以用JS做到這一點,我只是想要一個沒有JS的解決方案。

在此先感謝

回答

0
Movienight::Application.routes.draw do 
    match '/movies/search', to: proc { |env| 
    [ 
     302, 
     {"Content-Type" => 'text/plain', 
     'Location' => 'cosmicvent.com', 
     'Set-Cookie' => 'sessionToken=abc123; Expires=Wed, 09 Jun 2021 10:18:14 GMT'}, 
     ['302 found'] 
    ] 
} 
end