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