在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
按钮时,所有内容都会正确路由。
有人对此进行了探索吗?感谢
答案 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);
});
});
});