2014-04-01 9 views
5

Ho un tipo JSON nel mio modello, che è venuta da Postgres, la migrazione appare come:Impossibile trovare la classe di ingresso per JSON - la gestione di tipo JSON in Admin attivo

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

La struttura di questo oggetto JSON si presenta come:

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

e in Active Record sto tentando di visualizzare l'oggetto in modo che possano essere modificati, o una nuova chiave/valore possono essere aggiunti:

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 

Quando vado a modificare una voce di persona da admin attivo ottengo "Impossibile trovare la classe di input per JSON".

mi piacerebbe che in modo che ogni chiave nella struttura JSON diventa un'etichetta per un ingresso, ad esempio:

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

Nel mio blocco forma di amministrazione attiva voglio specificare 3/4 tasti predefinite , ad esempio facebook, google, twitter, se una di queste chiavi non esiste nella struttura JSON proveniente dal modello, verrà visualizzata come input vuoto, consentendo all'amministratore di aggiungere un valore a tale chiave e salvarlo nuovamente in il database. Se la chiave esiste nella struttura JSON, l'input verrà popolato con il suo valore in modo che possa essere modificato.

Quindi la mia domanda è: come posso semplicemente gestire/modificare una struttura JSON dall'amministratore attivo e rappresentare i dati nel formato sopra?

risposta

13

Questo funziona:

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 

E non è la soluzione più bella, ma a meno che qualcuno ha una migliore risposta che avrà a che fare.

Problemi correlati