Вложенная форма ресурса 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. Я должен был обратить внимание на то, почему он был настроен именно так.