2013-10-02 90 views
12

是否可以使用查詢字符串中的新參數重定向回引用url?rails 4使用新參數重定向

是這樣的:

redirect_to :back, custom_param='foo' 
+0

當你說':back'你是指回到用戶來自哪裏或某個動作命名爲'back?' – tihom

+0

第一個==>:回到 – user1066183

+0

編輯了這個問題以使意思更清楚。 – tihom

回答

5

你可以把它放在會話,然後重定向回

session[:somekey] = value 
redirect_to :back 
+0

它爲什麼要工作? – user1066183

+0

使用會話時,會話中的值保留在請求之間。 – techvineet

+1

是的,但我需要把鏈接中的參數,我需要一些像這樣:http:// localhost:3000 /?locale ='pt' – user1066183

5

試試這個:

# get a URI object for referring url 
referrer_url = URI.parse(request.referrer) rescue URI.parse(some_default_url) 
        # need to have a default in case referrer is not given 


# append the query string to the referrer url 
referrer_url.query = Rack::Utils.parse_nested_query(referrer_url.query). 
        # referrer_url.query returns the existing query string => "f=b" 
        # Rack::Utils.parse_nested_query converts query string to hash => {f: "b"} 
        merge({cp: 'foo'}). 
        # merge appends or overwrites the new parameter => {f: "b", cp: :foo'} 
        to_query 
        # to_query converts hash back to query string => "f=b&cp=foo" 



# redirect to the referrer url with the modified query string 
redirect_to referrer_url.to_s 
        # to_s converts the URI object to url string 
+0

這裏有一個問題。 'Rack :: Utils.parse_nested_query(referrer_url.query)'返回帶有字符串化鍵的散列。所以如果你的'referrer_url'有'cp = bar'作爲它當前的查詢字符串。該網址的查詢將是:'cp = bar&cp = foo'。根據需要將'Rack :: Utils.parse_nested_query(referrer_url.query)'改爲'Rack :: Utils.parse_nested_query(referrer_url.query).symbolize_keys.'或'Rack :: Utils.parse_nested_query(referrer_url.query).stringify_keys' – DickieBoy

1

另一種方法可能是通過將它傳遞「閃光燈」(在重定向請求後它會自動消失):

flash[:somekey] = 'some value' 
redirect_to :back 

但是,正如我的一位同事指出的,更好的方法是將其作爲查詢參數返回,以保持其無狀態並區分這兩個URL。看起來沒有一個很好的內置Rails方法來做到這一點,這讓我想知道這種方法還有什麼問題。