button_to使用GET方法

时间:2012-07-18 11:24:34

标签: ruby-on-rails ruby-on-rails-3

我正在使用Rails第4版(Rails 3.2+)进行敏捷Web开发,我对button_to方法感到有些困惑。这本书以及我所做的所有其他谷歌搜索都说button_to使用了POST请求。但是,当我检查页面时,button_to似乎正在使用GET方法。

现在,我可能有这个错误,但我来自php背景和POST方法总是意味着数据被传递到没有url的服务器并通过阵列服务器端访问:

$_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传递数据(?product_id = 4)。虽然我可以清楚地看到&#34;方法=&#39; post&#39;&#34;,这不是使用GET吗?

3 个答案:

答案 0 :(得分:5)

默认情况下,它使用POST方法。如果您需要GET,只需输入:

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

您可以检查rails的日志并验证它是否真的是POST请求。

答案 1 :(得分:1)

POST请求也可以有QUERY_STRING。问题是,line_items_path在名为:product_id的路径中没有参数,这就是帮助者将此参数添加到QUERY_STRING的原因。如果你想让它在路径中,检查你的路线(rake routes),必须有类似的东西

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

答案 2 :(得分:1)

正如FancyDancy所说,即使信息通过URL传递,它仍然是一个帖子请求。 Rails不区分$_GET$_POST。它只相当于$_REQUESTparams。因此,如果product_id通过URL或隐藏的表单字段传递,则无关紧要。在这两种情况下,您都可以通过params[:product_id]获得。