簡體   English   中英

替換redirect_to request.referer中的GET參數

[英]Replace GET params in redirect_to request.referer

我正在嘗試替換GET參數:

redirect_to request.referer

我的request.referer已經包含一個參數:

http://www.foo.com/bar?par=10

當我嘗試:

redirect_to request.referer, :par => 5

它不起作用。 它重定向到引用,但不會更改:par從10到5。當我確實重定向到url_path時,例如

redirect_to root_path, :par => 5

可以,可以重定向到:

http://www.foo.com/?par=5

所以我的問題是如何替換request.referer URI中的參數。 另一個問題是我應該使用request.referer還是:back?

謝謝

問題是redirect_to最終只接受一個字符串,即url。 如果你要做類似的事情

redirect_to edit_foo_path(@foo, :bar => "qux")

那么您正在使用路徑助手來生成該字符串。 即, edit_foo_path(:bar => "qux")是幫助器,它將被轉換為"/foo/123/edit?bar=qux" ,它只是一個“啞”字符串。 如果您正在使用幫助程序,則可以切換參數,但是使用字符串已經完成,如果您知道我的意思。

request.referer也是一個字符串,因此您需要做的是將其分解為組成部分,根據需要修改這些部分,然后再次將其重新組裝為字符串。 有問題的部分是協議,主機,路徑和參數。 在這種情況下,您無需更改協議,主機或路徑,因此可以使其保持不變。 將參數轉換為哈希后,將最容易對其進行操作。 Rails具有各種url處理功能,您可以在此處使用它們,因此可能有幾種不同的方法可以執行此操作。 我將按照以下步驟進行操作,這可能不是最有效的。

url = URL(request.referer)
#you could get this via a regex but i'm doing it "formally" with the Url object
host_and_path = "#{url.scheme}://#{url.host}#{url.path}"
params = CGI.parse(url.query)
#now you've got params as a hash you can do what you want to it.
params["par"] = 5
new_url = "#{host_and_path}?#{params.to_param}"
redirect_to new_url

就像我說的那樣,可能有更有效的方法(就代碼行而言,它沒有速度方面的問題),但是無論如何,我認為逐步查看方法很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM