2014-04-01 15 views
5

Tôi có một kiểu JSON trong mô hình của tôi, mà là đến từ Postgres, sự di cư trông giống như:Không tìm thấy lớp đầu vào cho json - xử lý kiểu JSON trong Active quản

create_table :people do |t| 
    t.string :name 
    t.json :links 
end 

Cấu trúc của đối tượng JSON này trông giống như:

{ 
    "facebook" : "u12345", 
    "google" : "u54321" 
} 

Và trong Active Record tôi đang cố gắng để hiển thị đối tượng này để họ có thể được chỉnh sửa, hoặc khóa/giá trị mới có thể được thêm vào:

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 

Khi tôi đi đến chỉnh sửa mục nhập người từ quản trị viên hoạt động, tôi nhận được "Không thể tìm thấy lớp đầu vào cho json".

Tôi muốn nó để mỗi quan trọng trong cấu trúc json trở thành một nhãn cho một đầu vào, ví dụ:

  __________ 
Facebook | u12345 | 
      ‾‾‾‾‾‾‾‾‾‾ 
      __________ 
Google | u54321 | 
      ‾‾‾‾‾‾‾‾‾‾ 
      __________ 
Twitter |   | 
      ‾‾‾‾‾‾‾‾‾‾ 

Trong khối hình thức quản trị hoạt động của tôi, tôi muốn xác định 3/4 phím được xác định trước , nói facebook, google, twitter, nếu một trong các khóa này không tồn tại trong cấu trúc JSON đến từ mô hình, nó sẽ được hiển thị dưới dạng đầu vào trống, cho phép quản trị viên thêm giá trị vào khóa đó và lưu lại kho dữ liệu. Nếu khóa không tồn tại trong cấu trúc JSON, đầu vào sẽ được điền với giá trị của nó để nó có thể được chỉnh sửa.

Vì vậy, câu hỏi của tôi là làm cách nào để quản lý/chỉnh sửa cấu trúc JSON từ quản trị viên đang hoạt động và đại diện cho dữ liệu theo định dạng trên?

Trả lời

13

này hoạt động:

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 

Nó không phải là giải pháp đẹp nhất, nhưng trừ khi ai đó có tốt hơn trả lời nó sẽ phải làm.

Các vấn đề liên quan