Вложенная форма ресурса has_many с Active Admin не обновляет

Я не могу понять, как использовать помощники ввода вложенных ресурсов в 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 по вложенным ресурсам и кучу SO сообщений, но не могу понять, что я делаю неправильно:(

1 ответ

Решение

Я понял, что я сделал не так - я немного обдумал это. Я не знал, что когда вы разрешаете строгие параметры, вы также должны разрешить :id параметр связанной записи, которую вы пытаетесь обновить. Я предполагал, что магия Rails позаботится об этом.

Так что это работает, если вы измените permit_params позвоните, чтобы сказать это вместо этого:

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

Фактически, именно так и поступает раздел "Сильные параметры" на вики-сайте Active Admin Github. Я должен был обратить внимание на то, почему он был настроен именно так.

Другие вопросы по тегам