2014-06-24 55 views
5

我有一個名爲'my_models'的'json'列,名爲'settings'。Postgresql JSON列爲HashWithIndifferentAccess

我也有以下型號:

class MyModels < ActiveRecord::Base 
end 

的 'MyModels' 實例的 '設置' 屬性是一個Hash。

是否可以將'MyModels'配置爲將'settings'的原始列值轉換爲HashWithIndifferentAccess而不是Hash?單獨

回答

5

序列化不會在這裏工作,因爲HashWithIndifferentAccess並不都loaddump方法作出迴應,但你可以這樣做:

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

參見Custom serialization for fields in Rails

+0

啊自定義序列。我一直認爲他們僅限於文本欄目,但效果很好! – Jacob

+8

雖然這可行,但應該注意的是,它可以防止您直接編輯散列。例如: model.my_hash_attribute = {} model.my_hash_attribute [:測試] = 「ABC」 model.my_hash_attribute#{} 不工作時最喜歡的人會期待它。 – joncalhoun