Ruby on Rails - 如何在更新表单中放置删除链接



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

但是,我还想在"更新"按钮旁边包含一个"删除"按钮。

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

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

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

无论我按哪个按钮,这个"_method"参数都会被拾取!

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

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

但是,有些事情感觉不对劲。有什么想法吗?

另一个不需要javascript的奇怪解决方法是将删除表单放在更新表单之外,但在更新表单中留下<标签>="theSubmitButtonInTheDeleteForm">。更新表单将继续按预期工作,但单击标签将提交删除表单。然后只需将标签样式设置为按钮即可。

我建议使用链接而不是按钮,并将其样式设置为按钮:

link_to("Remove", resource_url, method: :delete, class: "delete_button")

在 Rails 3 中,使用 Ajax 提交表单的推荐方法是将form_forUJS 结合使用,而不是remote_form_for。请看这个轨道广播剧集了解更多信息。

然后,当文档准备就绪/加载时,向每个按钮添加一个单击侦听器,并采取相应的操作:

$('#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。

基本上,"更新表单"和"删除表单"之间的唯一区别是存在<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">');
}
= f.button :submit, class: "btn-primary"
= link_to "Delete", f.object, class: 'btn btn-default', data: {method: 'DELETE'}

删除链接的样式与引导程序一起看起来像一个按钮。 jquery-ujs劫持具有data-method属性的链接点击,并使用自定义HTTP方法发送它们。

你可以

这样做:

<%= button_to 'Delete', point_path(point), :method => 'delete', :confirm => 'Are you sure?' %>

你会做一个link_to 'del', 变量, :confirm => '你确定吗?', :method => :d elete

:method => :d elete 将调用控制器的销毁部分。

相关内容

  • 没有找到相关文章

最新更新