Ruby on rails activeadmin:为嵌套资源添加删除
我有一个为许多数据中心组成的基础结构对象。在apps/admin/infrastructures.rb中,我有以下代码:Ruby on rails activeadmin:为嵌套资源添加删除,ruby-on-rails,ruby,activeadmin,Ruby On Rails,Ruby,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 en
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
我可以毫无问题地添加数据中心,但我不知道如何从基础架构表单中删除它。这应该可以:
datacenter_form.label :_delete
datacenter_form.check_box :_delete
这将为每个嵌套对象添加一个复选框,如果选中该复选框,将删除该对象。添加以下行:
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
2017年9月更新:
Rails 5.1.4、ActiveAdmin 1.0.0
在许可参数
中附加:id
和\u destroy
,以及模型中的其他属性,例如在您的案例中的:name
。然后在f中提供: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
这对我很有用:
i.input :_destroy, as: :boolean
在模型中,请记住添加:allow_destroy:
accepts_nested_attributes_for :images, allow_destroy: true
我希望这会有所帮助(我已经更改了代码以适合您的示例,因此我希望这里没有输入错误):
控制器方法应该在datacenters.rb中定义
controller do
def destroy
@datacenter = Datacenter.find(params[:id])
@datacenter.destroy
redirect_to edit_admin_retailer_path(@datacenter.infrastructure)
end
end
如果无法销毁嵌套的对象。您需要在app/admin/object.rb permit\u参数中添加:_destroy
permit_params :id,:name, :cod, :_destroy
不要忘记将以下内容添加到父模型中
has_many :child_name, :dependent => :destroy
谢谢你的回答。我得到了一个错误:“未定义的方法`#的`_delete`”,这是可行的,但它看起来太草率了。是否有一种方法可以添加active admin在更新时向现有资源添加新嵌套资源时所具有的删除按钮?同意。为什么持久化记录的删除按钮没有出现?同意是否有按钮?是的,有人找到了解决方案吗?对于Rails 4,只有在我通过强参数允许时,它才对我有效::\u destroy
:permit\u params…,嵌套的\u model\u属性:[:\u destroy,]
我忘记了为接受嵌套属性的上的允许销毁:true
选项,我认为允许参数足够了,谢谢!其他答案都没有提到这一点。如果需要销毁嵌套属性,则:\u destroy
参数应位于嵌套属性
属性中。=>(permit_params:attr,:attr,_attributes:[:attr,:attr,:_destroy]请更具体地回答您的问题。请解释此操作的作用以及代码片段如何回答问题。
has_many :child_name, :dependent => :destroy