无法找到json的输入类 - 在Active Admin中处理JSON类型

Stu*_*tuR 7 postgresql json activeadmin ruby-on-rails-4

我的模型中有一个JSON类型,它来自Postgres,迁移看起来像:

create_table :people do |t|
  t.string :name
  t.json :links
end
Run Code Online (Sandbox Code Playgroud)

此JSON对象的结构如下所示:

{ 
  "facebook" : "u12345",
  "google" : "u54321"
}
Run Code Online (Sandbox Code Playgroud)

在Active Record中,我试图显示此对象,以便可以编辑它们,或者可以添加新的键/值:

  form do |f|
    f.inputs "Person Details" do
      f.input :name
      f.input :links <- Error here because active admin doesn't recognise JSON type
    end
    f.actions
  end
Run Code Online (Sandbox Code Playgroud)

当我从活动管理员编辑人员条目时,我得到"无法找到json的输入类".

我喜欢它,以便json结构中的每个键成为输入的标签,例如:

          __________
Facebook | u12345   |
          ??????????
          __________
Google   | u54321   |
          ??????????
          __________
Twitter  |          |
          ??????????
Run Code Online (Sandbox Code Playgroud)

在我的活动管理表单块中,我想指定3/4预定义的键,比如facebook,google,twitter,如果来自模型的JSON结构中不存在其中一个键,它将显示为空输入,允许管理员为该键添加值,并将其保存回数据库.如果密钥确实存在于JSON结构中,则将使用其值填充输入,以便可以对其进行编辑.

所以我的问题是如何从主动管理员简单地管理/编辑JSON结构,并以上述格式表示数据?

Stu*_*tuR 18

这有效:

  permit_params :name, {:links => [:facebook, :twitter]}

  form do |f|
    f.inputs "Person Details" do
      f.input :name
    end
    f.inputs :name => "Links", :for => :links do |g|
      g.input :facebook, :input_html => { :value => "#{person.links['facebook']}" }
      g.input :twitter, :input_html => { :value => "#{person.links['twitter']}" }
    end
    f.actions
  end
Run Code Online (Sandbox Code Playgroud)

这不是最好的解决方案,但除非有人有更好的答案,否则必须这样做.


Ort*_*ntz 5

有一个宝石: https: //github.com/udacity/activeadmin_json_editor

activeadmin_json_editor允许您使用结构化字段编辑器编辑 JSONb 字段。管理员应该理解哈希或数组的概念,但除此之外,它是开箱即用的。