【问题标题】:Ruby on rails, Form buttons get their routes mixed upRuby on rails,表单按钮混淆了它们的路线
【发布时间】:2015-07-07 23:08:12
【问题描述】:

在 Ruby on Rails 中创建表单时,我遇到了一些奇怪的事情,我的 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按钮时,一切都已正确路由。

有人对此有解释吗?谢谢

【问题讨论】:

  • 只需删除表单外的删除按钮。
  • 或者你可以把button_to改成link_to

标签: ruby-on-rails ruby forms routes


【解决方案1】:

您会看到这种行为,因为当您使用 button_to 帮助程序时,会遇到很多事情。 button_to 不只是创建一个按钮——它实际上创建了一个完整的表单,实际的按钮用作表单的提交按钮。

通过在表单中​​包含您的 button_to 助手,您违反了 HTML 的“无嵌套表单”规则,并有效地为您的表单添加了第二个提交按钮,该按钮覆盖了预期的提交按钮。 HTML 中的提交按钮和输入类型按钮之间是有区别的,正如我已经提到的,button_to 创建了一个提交按钮。

如果您像 Ahmad 指出的那样将 button_to 移到表单之外,您将取消嵌套表单,并且您的视图应该按预期运行。

更多详情请咨询API doc

【讨论】:

    【解决方案2】:

    您的删除按钮应该在您的表单之外。

    <%=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"%> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 2011-04-11
      • 2011-02-15
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多