2014-06-24 22 views
5

Ho una tabella chiamata "my_models" con una colonna "json" chiamata "impostazioni".Colonna Postgresql JSON come HashWithIndifferentAccess

Ho anche avere il seguente modello:

class MyModels < ActiveRecord::Base 
end 

L'attributo 'impostazioni' di un'istanza 'MyModels' è un hash.

È possibile configurare "MyModels" per digitare il valore della colonna non elaborata di "impostazioni" su HashWithIndifferentAccess anziché su Hash?

risposta

5

Serialize sola non funzionerà qui dal HashWithIndifferentAccess non risponde ad entrambe le load e dump metodi, ma si può fare questo:

class THEModel < ActiveRecord::Base 
    def my_hash_attribute 
    read_attribute(:my_hash_attribute).with_indifferent_access 
    end 
end 

Vedi anche Custom serialization for fields in Rails

+0

Ahh un serializzatore personalizzato. Ho sempre pensato che fossero limitati a colonne di testo, ma funziona benissimo! – Jacob

+8

Mentre funziona, dovrebbe probabilmente essere notato che impedisce di modificare direttamente l'hash. Per esempio: model.my_hash_attribute = {} model.my_hash_attribute [: Test] = "abc" model.my_hash_attribute # {} non funziona come la maggior parte delle persone si aspettano di. – joncalhoun

Problemi correlati