我正在使用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吗?
答案 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
。它只相当于$_REQUEST
:params
。因此,如果product_id通过URL或隐藏的表单字段传递,则无关紧要。在这两种情况下,您都可以通过params[:product_id]
获得。