activeadmin: adding delete for a nested resource

别等时光非礼了梦想. 提交于 2019-12-12 07:39:56

问题


I have a infrastructure object composed for many datacenters. In the apps/admin/infrastructures.rb I have the following code:

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

I can add datacenters with no problems but I don't know how I can delete it from infrastructure form.


回答1:


Sep 2017 Update:

Rails 5.1.4, ActiveAdmin 1.0.0

Append :id and _destroy in permit_params along with other attributes from the model e.g. :name in your case. Then provide the :allow_destroy option in f.has_many too. Other requirements remain the same; like adding allow_destroy: true in accepts_nested_attributes_for.

Final look:

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 Reference


This worked for me:

     i.input :_destroy, as: :boolean

and in the Model remember to add :allow_destroy :

     accepts_nested_attributes_for :images, allow_destroy: true



回答2:


Solved adding the following line:

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

The code looks like:

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



回答3:


If you cant destroy the object nested. You need to put :_destroy in your app/admin/object.rb permit_params

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



回答4:


I hope this will be helpful (I've changed my code to suit your example, so I hope there are no typos here):

  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

and the controller method should be defined in datacenters.rb

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



回答5:


This should work:

datacenter_form.label :_delete
datacenter_form.check_box :_delete

This adds a checkbox for each nested object which will delete the object if checked.




回答6:


Don't forget to add the following to your parent model

has_many :child_name, :dependent => :destroy


来源:https://stackoverflow.com/questions/8980714/activeadmin-adding-delete-for-a-nested-resource

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!