ruby-on-rails – 具有Active Admin的嵌套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,并更改现有属性的值时(或当我选中Delete复选框时),会发生什么,而不是PageAttribute的新记录创建模型并保持现有关联不变.

我通读了Active Admin documentation on nested resources,以及一堆SO帖子,但无法弄清楚我做错了什么:(

解决方法

我意识到我做错了什么 – 我有点过分思考了.我不知道当您允许强参数时,您还必须在您尝试更新的关联记录上允许:id参数.我有点假设Rails魔术会照顾它.

因此,如果您更改permit_params调用以将其改为:

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

事实上,这就是the Strong Parameters section on the Active Admin Github wiki所说的,我应该注意为什么这样设置.

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...