2015-02-17 51 views
0

當我提交表單時,會設置一些參數而不顯示在url中。使用link_to設置參數哈希值,而不會影響Rails 4中的url

我願做同樣的事情的link_to:

<%= link_to((purchase.paid ? 'yes' : 'no'), {action: :index, hidden_id: purchase.id}) %> 

產生的URL 'http://localhost:3000/purchases?hidden_id=1'。我想鏈接到url'http://localhost:3000/purchases',同時仍然設置params [:hidden_​​id],所以我可以在控制器中訪問它,就好像我已經提交了一個表單。

我的routes.rb文件如下:

root to: 'products#index' 
resources :products 
resources :purchases 
match ':controller/(:action/(:id))', controller: :shop, via: [:get,:post] 

在回答這個,有什麼我應該在這裏知道這兩件事情處理的方式有什麼區別?這是關於獲取vs發佈請求還是有一些其他原理涉及我沒有掌握?

回答

1

是的,這與Get vs Post請求有關。

Get請求只能在URL本身發送參數。發佈的請求也可以發送到一個包含URL本身的參數的URL,但它也可以發送參數「引擎蓋下」。

因此,如果您的路線設置爲允許,您可以向http://localhost:3000/purchases?hidden_id=1發送獲取請求或發佈請求,但只有發佈請求可以包含其他參數。

還有什麼其他你應該知道的方式處理這兩種方式的區別?是。在大多數Web框架中,當您看到服務器端的參數時,它們將被分成GET參數和POST參數。 Rails沒有做出這種區分,並將它們放在相同的參數哈希中。 (我認爲這很愚蠢,但無論如何)。

另外,只需在瀏覽器中輸入URL並按回車即可發送獲取請求。通常,只有在網頁上提交表單的用戶才能執行發佈請求。出於這個原因,獲取請求並不意味着更改數據庫中的任何內容。他們應該僅用於查看信息。所以,例如,如果你有一個按鈕來刪除一個資源(例如,博客文章或其他東西),它應該通過郵件提交。 (更多信息,在Why shouldn't data be modified on an HTTP GET request?

最後,Rails提供了一個選項,它的link_to助手允許您輕鬆地使'鏈接'使用一個post請求。請參閱http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to上的method選項。這基本上使用JavaScript來阻止點擊鏈接(這將是一個獲取請求)的正常行爲,並提交一個發佈請求。

+0

謝謝,這正是我需要知道的。 – PoolOfPeas 2015-02-17 22:50:25

相關問題