Ruby on rails,Form按钮让他们的路线混乱

时间:2015-07-07 23:08:13

标签: ruby-on-rails ruby forms routes

在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按钮时,所有内容都会正确路由。

有人对此进行了探索吗?感谢

2 个答案:

答案 0 :(得分:2)

您已经看到了这种行为,因为当您使用button_to帮助程序时,您的眼光远远超出了人们的视线。 button_to并不只是创建一个按钮 - 它实际上创建了一个完整的表单,实际的按钮用作表单的提交按钮。

通过在表单中​​加入button_to帮助者,您违反了HTML&#34;没有嵌套表单&#34;规则并有效地为表单添加第二个提交按钮,该按钮将覆盖预期的提交按钮。 HTML中的提交按钮和类型按钮的输入之间存在差异,正如我已经提到的,button_to创建了一个提交按钮。

如果你按照艾哈迈德的指示将button_to移到你的表单之外,那么你将取消嵌套你的表单,你的视图应该按预期运行。

有关其他详细信息,请参阅API doc

答案 1 :(得分:1)

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

$(document).ready(function(){
 $("#tabs a").on("click", function(e){
   e.preventDefault();
  var html = $(this).attr('href');
  var htmlurl = 'html/'+html;

   // update to the newest tab
   $("#tabs a").removeClass("active");
   $(this).addClass("active");

   // set the new page content
   $("#content-wrap").hide().load(htmlurl, function(){
  $(this).fadeIn(400);
   });
 });
  });