2012-07-18 93 views
2

我正在通過使用Rails第4版(Rails 3.2+)進行敏捷Web開發,我對button_to方法有些困惑。這本書以及我所做的每一個谷歌搜索都說button_to使用POST請求。但是,當我檢查頁面時,button_to似乎正在使用GET方法。button_to使用GET方法

現在,我可以有這個毛病,但我來自一個PHP的背景和POST方法總是意味着數據被傳遞到沒有網址的服務器,並通過一個數組服務器端訪問:

$_POST['form_item'] 

此外,GET請求指通過URL傳遞數據:

someurl.com/somepage?DATA=data_value 

使用此button_to代碼:

<%= button_to 'Add to Cart', line_items_path(product_id: product_id) %> 

這將成爲輸出形式:

<form action="/line_items?product_id=4" class="button_to" method="post"> 
<div> 
<input type="submit" value="Add to Cart" /> 
<input name="authenticity_token" type="hidden" value="vGT1scGqasbQAMxYwofXHCM62MfSyM/pNty69Ep5t38=" /> 
</div> 
</form> 

此表格上的動作似乎通過URL來傳遞數據(產品= 4?)。雖然我可以清楚地看到「method ='post'」,但是這不是使用GET嗎?

+0

@mischa感謝您的澄清。請發表您的評論作爲答案。 – flyingarmadillo 2012-07-18 12:16:25

回答

1

由於FancyDancy說,它仍然即使信息被通過URL通過POST請求。 Rails沒有區分$_GET$_POST。它只有相當於$_REQUESTparams。因此,product_id是通過URL還是通過隱藏的表單字段傳遞並不重要。在這兩種情況下,您都可以通過params[:product_id]獲得。

5

默認情況下,它使用POST方法。如果您需要GET,只需輸入:

<%= button_to 'Add to Cart', line_items_path(product_id: product_id), :method => :get %> 

您可以檢查rails的日誌並驗證它是否是真正的POST請求。

1

POST請求也可以有QUERY_STRING。問題是,line_items_path在路徑:product_id中沒有參數,這就是爲什麼幫助程序將此參數添加到QUERY_STRING。如果你想擁有它的路徑,請檢查您的路由(rake routes),必須有像

POST  /line_items/:product_id(.:format)  line_items