activeadmin:为嵌套资源添加删除

我有一个为许多数据中心组成的基础结构对象。 在apps / admin / infrastructures.rb中,我有以下代码:

form do |f| f.inputs "Infrastructure details" do f.input :name f.has_many :datacenters do |datacenter_form| datacenter_form.input :name end end f.buttons end 

我可以添加没有问题的数据中心,但我不知道如何从基础架构表单中删除它。

2017年9月更新:

Rails 5.1.4,ActiveAdmin 1.0.0

追加:id _destroy中的:id_destroy以及模型中的其他属性,例如:name您的案例中的:name 。 然后在f.has_many提供:allow_destroy选项。 其他要求保持不变; 比如在accepts_nested_attributes_for添加allow_destroy: true

最后看:

 ActiveAdmin.register Infrastructure do permit_params :name, datacenters_attributes: [:id, :_destroy, :name] form do |f| f.inputs "Infrastructure details" do f.input :name f.has_many :datacenters, heading: false, allow_destroy: true, new_record: false do |datacenter_form| datacenter_form.input :name end end f.buttons end end 

ActiveAdmin参考


这对我有用:

  i.input :_destroy, as: :boolean 

并在模型中记得添加:allow_destroy:

  accepts_nested_attributes_for :images, allow_destroy: true 

解决了添加以下行:

 datacenter_form.input :_destroy, :as => :boolean, :required => false, :label => 'Remove' 

代码如下:

 form do |f| f.inputs "Infrastructure details" do f.input :name f.has_many :datacenters do |datacenter_form| datacenter_form.input :name datacenter_form.input :_destroy, :as => :boolean, :required => false, :label => 'Remove' end end f.buttons end 

如果你不能破坏嵌套的对象。 你需要在你的app / admin / object.rb permit_params中添加:_destroy

 permit_params :id,:name, :cod, :_destroy 

我希望这会有所帮助(我已经改变了我的代码以适应你的例子,所以我希望这里没有拼写错误):

  form do |f| f.inputs "Infrastructure details" do f.input :name f.has_many :datacenters do |datacenter_form| datacenter_form.inputs :datacenters do datacenter_form.input :name end datacenter_form.buttons do link_to "Delete", admin_datacenter_path(datacenter_form.object), method: "delete", class: "button" unless datacenter_form.object.new_record? end end end f.buttons end 

并且应该在datacenters.rb中定义控制器方法

 controller do def destroy @datacenter = Datacenter.find(params[:id]) @datacenter.destroy redirect_to edit_admin_retailer_path(@datacenter.infrastructure) end end 

这应该工作:

 datacenter_form.label :_delete datacenter_form.check_box :_delete 

这会为每个嵌套对象添加一个复选框,如果选中该对象将删除该对象。

不要忘记将以下内容添加到父模型中

 has_many :child_name, :dependent => :destroy