link_to
用于处理 GET 方法,而 button_to
用于处理 POST 方法。另一方面,我被告知,在 HTML5 语义中,
<button>
用于任何类型的可点击按钮。如果我有一个可点击的按钮,它会将用户发送到一个表单来填写,那么我应该创建一个 button_to
还是一个 link_to
?link_to
用于处理 GET 方法,而 button_to
用于处理 POST 方法。<button>
用于任何类型的可点击按钮。如果我有一个可点击的按钮,它会将用户发送到一个表单来填写,那么我应该创建一个 button_to
还是一个 link_to
?其实比你想象的简单。
这些方法是Rails助手,与Haml无关。
是的,一个方法用于获取,另一个方法用于提交。如果需要向控制器提交任何数据,请使用button_to
(例如在删除记录时)。否则,link_to
就足够了。
此外,您可以使用:method
参数使link_to
提交数据:
= link_to "Something", some_path, :method => :post
回答你的问题,使用link_to
方法。
#link_to
和#button_to
之间的主要区别在于#link_to
只创建一个链接标签A
,并且不需要额外的数据进行简单的AJAX请求,而#button_to
则是创建了一个带有自定义数据的FORM
表单,该表单可用于向Web服务器发送扩展的AJAX请求。表单数据包括内嵌的CSRF令牌,用于验证请求。在#link_to
的情况下,必须对CSRF令牌进行序列化,并在on_click
事件中发送。
您应该使用链接来指向用户所需的资源,例如一篇文章。
但是,您必须使用按钮来指向某个操作(如编辑页面上的“创建”/“发送”)。如果这与您的界面不符,请将它们样式化为链接。
原因是:如果用户没有启用 javascript 支持,则无法使用 link_to
指向任何非 GET 操作。在这种情况下,按钮是唯一的选项,以触发您的发送/销毁操作。
如果您的链接指向最终会导致修改资源的页面(链接/按钮指向显示表单的编辑/创建页面),则请随意使用两种方法,就像您的情况一样。
如果您只是想将用户发送到某个地方,那么这就是GET请求。因此,在这种情况下,您应该使用link_to。顺便说一句,如果您指定了:method,您可以在post请求和其他请求(例如button_to)中使用link_to。例如:=link_to "some path", some_path, :method => :get
已更新至Rails 7
从链接发起POST请求:
link_to
方法:
<%= link_to "Add to cart", line_items_path(product.id), data: {turbo_method: :post} %>
button_to
方法:
<%= button_to "Add to cart", line_items_path(product.id) %>
method: 'post'
添加到链接中,而不是data-method: 'post'
。 - Fabrizio Bertoglio