2013-10-02 36 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方法来做到这一点,这让我想知道这种方法还有什么问题。