Haml: link_to与button_to的区别

11
据我了解,link_to 用于处理 GET 方法,而 button_to 用于处理 POST 方法。
另一方面,我被告知,在 HTML5 语义中,<button> 用于任何类型的可点击按钮。如果我有一个可点击的按钮,它会将用户发送到一个表单来填写,那么我应该创建一个 button_to 还是一个 link_to
5个回答

18

其实比你想象的简单。 这些方法是Rails助手,与Haml无关。 是的,一个方法用于获取,另一个方法用于提交。如果需要向控制器提交任何数据,请使用button_to(例如在删除记录时)。否则,link_to就足够了。

此外,您可以使用:method参数使link_to提交数据:

= link_to "Something", some_path, :method => :post

回答你的问题,使用link_to方法。


这会将 method: 'post' 添加到链接中,而不是 data-method: 'post' - Fabrizio Bertoglio

4

#link_to#button_to之间的主要区别在于#link_to只创建一个链接标签A,并且不需要额外的数据进行简单的AJAX请求,而#button_to则是创建了一个带有自定义数据的FORM表单,该表单可用于向Web服务器发送扩展的AJAX请求。表单数据包括内嵌的CSRF令牌,用于验证请求。在#link_to的情况下,必须对CSRF令牌进行序列化,并在on_click事件中发送。


3

应该使用链接来指向用户所需的资源,例如一篇文章。

但是,您必须使用按钮来指向某个操作(如编辑页面上的“创建”/“发送”)。如果这与您的界面不符,请将它们样式化为链接。

原因是:如果用户没有启用 javascript 支持,则无法使用 link_to 指向任何非 GET 操作。在这种情况下,按钮是唯一的选项,以触发您的发送/销毁操作。

如果您的链接指向最终会导致修改资源的页面(链接/按钮指向显示表单的编辑/创建页面),则请随意使用两种方法,就像您的情况一样。


2

如果您只是想将用户发送到某个地方,那么这就是GET请求。因此,在这种情况下,您应该使用link_to。顺便说一句,如果您指定了:method,您可以在post请求和其他请求(例如button_to)中使用link_to。例如:=link_to "some path", some_path, :method => :get


1

已更新至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) %>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接