我有一本型号为Book的书,其属性是一个称为genre_ids的整数数组。
我正在尝试在ActiveAdmin中添加一个可编辑的字段,该字段允许我仅添加适用类型的ID,并能够保存一本书并对其进行更新。
这在控制台中有效,但是每次我在ActiveAdmin中保存或更新时,无论我在字段中输入什么内容,genre_ids都保存为“ [0]”。我还有另一个属性,它是一个称为“列表”的字符串数组,它可以将我输入到该数组中的所有字符串保存起来。
我尝试删除before_action来查看是否是问题所在,并且它对genre_ids的保存方式没有影响(仍然使此属性为[0])。它也未列为不允许的参数,并且我在日志中看到Rails参数正在发送我在genre_ids中输入的任何内容作为参数(这些参数不包含[0])。
任何关于为什么会这样的想法将不胜感激!
这是我在ActiveAdmin页面上的代码:
books.rb
json_editor
permit_params [:name, :description, { lists: [] }, { genre_ids: [] } ]
form html: { multipart: true } do |f|
f.inputs do
f.input :name
f.input :description
f.input :lists, as: :json
f.input :genre_ids, as: :json
end
end
controller do
before_action :clean_array_elements, only: [:create, :update]
private
def clean_array_elements
array_elements = [:lists, :genre_ids]
array_elements.each do |el|
clean_elements(el)
end
end
def clean_elements(el)
unless params[:book][el] == "[]"
params[:book][el] = params[:book][el].gsub('["', '').gsub('"]', '').split('","') if params[:book][el].present?
end
end
end