activeadmin: добавление удаления для вложенного ресурса - PullRequest
21 голосов
/ 24 января 2012

У меня есть объект инфраструктуры, созданный для многих центров обработки данных. В 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

Я могу без проблем добавлять центры обработки данных, но не знаю, как удалить их из формы инфраструктуры.

Ответы [ 6 ]

39 голосов
/ 26 июня 2012

сентябрь 2017 Обновление:

Rails 5.1.4, ActiveAdmin 1.0.0

Добавление :id и _destroy в permit_params вместе с другими атрибутамиот модели например :name в вашем случае.Затем укажите параметр :allow_destroy в f.has_many.Другие требования остаются прежними;как добавление allow_destroy: true в accepts_nested_attributes_for.

Окончательный вид:

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
14 голосов
/ 30 января 2012

Решено с добавлением следующей строки:

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
4 голосов
/ 05 января 2014

Если вы не можете уничтожить вложенный объект.Вам нужно поместить: _destroy в ваше приложение / admin / object.rb allow_params

permit_params :id,:name, :cod, :_destroy
1 голос
/ 11 августа 2012

Надеюсь, это будет полезно (я изменил свой код в соответствии с вашим примером, поэтому надеюсь, что здесь нет опечаток):

  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
0 голосов
/ 08 января 2018

Не забудьте добавить следующее к вашей родительской модели

has_many :child_name, :dependent => :destroy
0 голосов
/ 24 января 2012

Это должно работать:

datacenter_form.label :_delete
datacenter_form.check_box :_delete

Это добавляет флажок для каждого вложенного объекта, который будет удалять объект, если установлен.

...