Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Сентябрь 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

Ответ 3

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

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

Ответ 4

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

  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

Ответ 5

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

datacenter_form.label :_delete
datacenter_form.check_box :_delete

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

Ответ 6

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

has_many :child_name, :dependent => :destroy