Rails 4:ActiveAdmin在更新时清除数组字段

时间:2019-03-08 09:50:00

标签: ruby-on-rails-4 activeadmin

我有一个这样注册的ActiveAdmin模型:

ActiveAdmin.register MyModel do
  permit_params :name, :synonyms

  filter :name

  index do
    selectable_column
    column :name

    actions
  end
end

我注意到,当我从ActiveAdmin界面更新对象时,同义词将被清除。同义词是在PostgreSQL数据库中定义的数组字段:

synonyms text[] DEFAULT '{}'::text[]

我尝试将以下内容放入app/admin/my_model.rb

controller do
  def update
    permitted_params[:my_model][:synonyms] = JSON.parse permitted_params[:my_model][:synonyms]
    super
  end
end

,我也使用params而不是permitted_params进行了尝试,但这也不起作用。不知道为什么ActiveAdmin会丢弃此字段。我做错了什么吗?我正在使用的项目使用ActiveAdmin 1.0.0.pre4(我意识到这是一个过时的版本)。

任何建议将不胜感激。预先感谢!

注意:好像是a common issue吗?

1 个答案:

答案 0 :(得分:0)

我不确定这是否适用于字符串数组,并且我不知道该特定版本的Activeadmin,但是我在稍有不同的情况下遇到了此问题。

我有一个模型,其中数组数据类型为小数和整数。我必须明确说明在编辑/更新记录时要使用的表单输入的类型,或者没有任何内容通过更新参数从字段传回。 Activeadmin默认选择一个数字输入,但需要将其作为字符串处理。

form do |f|
  f.inputs do
    f.input :ages, as :string, :input_html => {:maxlength => '100'}
  end
end

我必须手动设置maxlength,因为由于某种原因,它会被自动设置得很短。在模型中,必须先将字符串转换为实际数组,然后再保存。

def ages= items
  if items.is_a? String
    items = items.split(' ')
    items.each do |i|
      i.to_i
    end
  end
  super items
end