如何在ActiveAdmin中保存整数数组?

时间:2018-06-28 15:44:39

标签: ruby-on-rails arrays integer activeadmin

我有一本型号为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

0 个答案:

没有答案