2012-07-18 95 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