【问题标题】:Rails 4: ActiveAdmin clears out an array field upon updateRails 4:ActiveAdmin 在更新时清除数组字段
【发布时间】:2019-03-08 09:50:00
【问题描述】:

我有一个这样注册的 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

【问题讨论】:

  • 尝试 self.params['synonyms'] = JSON.parse params['my_model]['synonyms]
  • 我在您的代码中没有看到任何形式。你是如何准确更新对象的?在我正在帮助开发的应用程序中,甚至有 froms 根本没有 permit_params 工作,使用 as: :select 表单输入和数组的多选:` form do |f| f.inputs 做 f.input :items, as: :select, collection: MyModel::ITEMS.values, multiple: true end end `

标签: ruby-on-rails-4 activeadmin


【解决方案1】:

我不确定这是否适用于字符串数组,并且我不知道 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多