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) 传递数据。虽然我可以清楚地看到“method='post'”,但这不是使用GET吗?

4

3 回答 3

7

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

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

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

于 2012-07-18T11:32:00.503 回答
1

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

POST      /line_items/:product_id(.:format)     line_items
于 2012-07-18T12:26:28.033 回答
1

正如 FancyDancy 所说,即使信息通过 URL 传递,它仍然是一个发布请求。Rails 不区分$_GET$_POST。它只相当于$_REQUEST: params。因此,product_id 是通过 URL 还是通过隐藏的表单字段传递并不重要。在这两种情况下,您都可以通过params[:product_id].

于 2012-07-19T23:51:56.457 回答