Ruby rails,表单按钮混淆了它们的路由
Ruby on rails, Form buttons get their routes mixed up
在 Rails 的 Ruby 中制作表单时,我遇到了一些奇怪的事情,我的 submit
按钮执行表单中另一个按钮的操作。
<%=form_for(happening) do |f|%>
<%=f.text_field :name, class:"updateInput" %>
<%=f.submit "Save", class:"editButton" %>
<%= button_to "Delete", happening, method: :delete, class:"editButton"%>
<input type="datetime-local" value="<%= happening.get_html_date %>">
<%end%>
当我单击此表单中的 submit
按钮时,它将被路由到 destroy
操作,而不是 update
操作。
当我删除 delete
按钮时,一切都正确路由。
有人对此有解释吗?谢谢
您的删除按钮应该在您的表单之外。
<%=form_for(happening) do |f|%>
<%=f.text_field :name, class:"updateInput" %>
<%=f.submit "Save", class:"editButton" %>
<input type="datetime-local" value="<%= happening.get_html_date %>">
<%end%>
<%= button_to "Delete", happening, method: :delete, class:"editButton"%>
您看到此行为是因为当您使用 button_to
帮助程序时,您看到的不仅仅是这些。 button_to
不只是创建一个按钮 -- 它实际上创建了一个完整的表单,实际按钮用作表单的提交按钮。
通过在表单中包含您的 button_to
助手,您违反了 HTML 的 "no nested forms" 规则并有效地为您的表单添加了第二个提交按钮,该按钮覆盖了预期的提交按钮。 HTML 中的提交按钮和输入按钮类型是有区别的,正如我已经提到的,button_to
创建了一个提交按钮。
如果您像 Ahmad 指出的那样将 button_to
移到表单之外,您将取消嵌套您的表单,并且您的视图应该按预期运行。
有关更多详细信息,请参阅 API doc。
在 Rails 的 Ruby 中制作表单时,我遇到了一些奇怪的事情,我的 submit
按钮执行表单中另一个按钮的操作。
<%=form_for(happening) do |f|%>
<%=f.text_field :name, class:"updateInput" %>
<%=f.submit "Save", class:"editButton" %>
<%= button_to "Delete", happening, method: :delete, class:"editButton"%>
<input type="datetime-local" value="<%= happening.get_html_date %>">
<%end%>
当我单击此表单中的 submit
按钮时,它将被路由到 destroy
操作,而不是 update
操作。
当我删除 delete
按钮时,一切都正确路由。
有人对此有解释吗?谢谢
您的删除按钮应该在您的表单之外。
<%=form_for(happening) do |f|%>
<%=f.text_field :name, class:"updateInput" %>
<%=f.submit "Save", class:"editButton" %>
<input type="datetime-local" value="<%= happening.get_html_date %>">
<%end%>
<%= button_to "Delete", happening, method: :delete, class:"editButton"%>
您看到此行为是因为当您使用 button_to
帮助程序时,您看到的不仅仅是这些。 button_to
不只是创建一个按钮 -- 它实际上创建了一个完整的表单,实际按钮用作表单的提交按钮。
通过在表单中包含您的 button_to
助手,您违反了 HTML 的 "no nested forms" 规则并有效地为您的表单添加了第二个提交按钮,该按钮覆盖了预期的提交按钮。 HTML 中的提交按钮和输入按钮类型是有区别的,正如我已经提到的,button_to
创建了一个提交按钮。
如果您像 Ahmad 指出的那样将 button_to
移到表单之外,您将取消嵌套您的表单,并且您的视图应该按预期运行。
有关更多详细信息,请参阅 API doc。