如何在Active Admin Rails 4中保存数组?

Moh*_*nas 11 arrays model activeadmin ruby-2.0 ruby-on-rails-4

我在Rails 4中使用Active Admin.在我的模型中,我有一个字段是Postgres数组类型,当我创建它在后台传递的对象但它没有保存到数据库.那么我需要做什么来通过Active Admin将数组字段保存在数据库中.

谢谢

ved*_*ant 9

你有黑客的东西,因为主动管理员不支持开箱即用,似乎.

虽然这个答案很老,但它的工作原理是:如何处理Active Admin资源中的序列化编辑字段?

以下是我如何处理这种情况的摘要.我添加了一个模型的访问器,它可以将Array转换为由换行符连接的字符串并将其拆分回Array.

# app/models/domain.rb
class Domain < ActiveRecord::Base
  serialize       :names, Array
  attr_accessor   :names_raw

  def names_raw
    self.names.join("\n") unless self.names.nil?
  end

  def names_raw=(values)
    self.names = []
    self.names=values.split("\n")
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,在我的域管理资源中,我使用了:names_raw字段,而不是使用:names字段.设置此值将使用新值保存名称Array.

# app/admin/domains.rb
form do |f|
  f.inputs "Domain" do
    f.input :names_raw, :as => :text
  end
  f.buttons
end
Run Code Online (Sandbox Code Playgroud)


Jor*_*kin 5

如果您不需要管理员使用精美的UI,这是一个类似但更简单的解决方案。

# app/model/thing.rb
def some_array_column= items
  if items.is_a? String
    super items.split(" ")
  else
    super items
  end
end
Run Code Online (Sandbox Code Playgroud)

# app/admin/thing.rb
ActiveAdmin.register Thing do
  index do
    column "Things" { |t| (t.some_array_column || []).join(" ") }
  end
end
Run Code Online (Sandbox Code Playgroud)