我有一个用于更新'Point'模型的远程表单。这是一个非常普通的表单,带有提交按钮。
但是,我还想在“更新”按钮旁边添加一个“删除”按钮。
不幸的是,这有一个问题。当我点击“更新”按钮时,它最终会删除该条目 - 删除链接似乎劫持了更新表单。
编辑:我想我知道为什么更新按钮正在删除。当我将删除链接添加到表单时,它会添加此输入:
<input name="_method" type="hidden" value="delete">
无论我按哪个按钮,这个“_method”param都被拿起来了!
现在,我知道我可以将删除按钮放在表单元素之外,但在这种情况下我不允许这样做。
我想删除按钮可能只是另一个更新提交按钮,但有一个额外的:remove_this参数。
但是,有些事情并不合适。有什么想法吗?
答案 0 :(得分:11)
另一个不需要javascript的好奇解决方法是将删除表单放在更新表单之外,但保留&lt; label for =“theSubmitButtonInTheDeleteForm”&gt;在更新表单内。 更新表单将继续按预期工作,但单击标签将提交删除表单。 然后将标签设置为按钮。
答案 1 :(得分:6)
我建议使用链接而不是按钮,并将其设置为按钮样式:
link_to("Remove", resource_url, method: :delete, class: "delete_button")
答案 2 :(得分:1)
在Rails 3中,使用Ajax提交表单的推荐方法是将form_for
与UJS
结合使用,而不是remote_form_for
。有关详细信息,请参阅此railscasts剧集。
然后,当文档准备好/加载时,您可以为每个按钮添加一个单击侦听器,并相应地执行操作:
$('#id_of_delete_button').click(function() {
// serialize the form and submit it to the delete action
});
$('#id_of_update_button').click(function() {
// serialize the form and submit it to the update action
});
给定的代码片段在jQuery中,但您也可以以类似的方式使用Prototype。
答案 3 :(得分:1)
基本上,“更新表单”与“删除表单”之间的唯一区别是<input name="_method" type="hidden" value="delete">
所以这是我提出的解决方法:
<%= form.submit 'Update', :id => "point_#{point.id}_submit", :style => "" %>
<%= form.submit 'Remove', :confirm => 'Are you sure?', :id => "point_#{point.id}_remove" %>
remove_button.observe('click', function(event)
{
form_element.insert('<input name="_method" type="hidden" value="delete">');
}
答案 4 :(得分:1)
= f.button :submit, class: "btn-primary"
= link_to "Delete", f.object, class: 'btn btn-default', data: {method: 'DELETE'}
删除链接使用Bootstrap设置样式,看起来像一个按钮。 jquery-ujs
劫持点击具有data-method
属性的链接,并使用自定义HTTP方法发送它们。
答案 5 :(得分:0)
你可以这样做:
<%= button_to 'Delete', point_path(point), :method => 'delete', :confirm => 'Are you sure?' %>
答案 6 :(得分:-1)
你要做一个link_to'del',变量,:confirm =&gt; “你确定吗?”,:method =&gt; :删除
:method =&gt; :delete将调用控制器的destroy部分。