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