Ruby on rails - 具有活动管理员的嵌套has_many资源表单不执行更新



我不知道如何使用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模型的新记录,而现有关联保持不变。

通读了有关嵌套资源的活动管理员文档和一堆 SO 帖子,但无法弄清楚我做错了什么:(

我意识到我做错了什么 - 我有点想多了。我不知道当您允许强参数时,您还必须允许您尝试更新的关联记录上的:id参数。我有点以为Rails的魔术会解决这个问题。

因此,如果您将permit_params调用更改为这样说,则可以正常工作:

permit_params page_attributes_attributes: [:id, :key, :value, :_destroy => true]

事实上,这就是活动管理员 Github wiki 上的强参数部分所说的,我应该注意为什么它是这样设置的。

相关内容

最新更新