如何在更新表单中添加删除链接?

时间:2011-05-13 11:35:27

标签: ruby-on-rails forms ruby-on-rails-3

我有一个用于更新'Point'模型的远程表单。这是一个非常普通的表单,带有提交按钮。

但是,我还想在“更新”按钮旁边添加一个“删除”按钮。

不幸的是,这有一个问题。当我点击“更新”按钮时,它最终会删除该条目 - 删除链接似乎劫持了更新表单。

编辑:我想我知道为什么更新按钮正在删除。当我将删除链接添加到表单时,它会添加此输入:

<input name="_method" type="hidden" value="delete">

无论我按哪个按钮,这个“_method”param都被拿起来了!

现在,我知道我可以将删除按钮放在表单元素之外,但在这种情况下我不允许这样做。

我想删除按钮可能只是另一个更新提交按钮,但有一个额外的:remove_this参数。

但是,有些事情并不合适。有什么想法吗?

7 个答案:

答案 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_forUJS结合使用,而不是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部分。