我无法弄清楚如何在Active Admin中使用嵌套资源输入帮助程序,以允许我更新相关记录的值,对于"父级"记录。
我试图生成更新的模型是这样的:
class Page < ActiveRecord::Base
has_many :page_attributes
accepts_nested_attributes_for :page_attributes, allow_destroy: true
end
其中PageAttribute
有两个属性,:key
和:value
ActiveAdmin模型是:
ActiveAdmin.register Page do
permit_params page_attributes_attributes: [:key, :value, :_destroy => true]
form do |f|
f.inputs do
f.has_many :page_attributes, allow_destroy: true, heading: 'Parts' do |page_part|
page_part.input :key
page_part.input :value
end
end
f.actions
end
end
但是,当我调用http://localhost:3000/admin/pages/2/edit
并更改现有属性的值时(或当我选中“删除”复选框时),会发生什么,即创建PageAttribute
模型的新记录并且现有的协会保持不变。
我通读Active Admin documentation on nested resources和一些SO帖子,但无法弄清楚我做错了什么:(
答案 0 :(得分:23)
我意识到我做错了什么 - 我有点过分思考了。我不知道当您允许强参数时,您还必须在您尝试更新的相关记录上允许:id
参数。我有点假设Rails魔术会照顾它。
因此,如果您更改permit_params
调用以改为说明:
permit_params page_attributes_attributes: [:id, :key, :value, :_destroy => true]
事实上,the Strong Parameters section on the Active Admin Github wiki说要做的事情,我应该注意为什么会这样设置。