0

後,我有些存儲大JSON字符串作爲文本字段在我的模型,但想有作爲OpenStruct變量訪問數據時,該模型的實例初始化ActiveRecord的模型變量。軌道4覆蓋初始化

換句話說:

Model: CrawlCache 
Field: results, type: text #Storing a JSON String 

當我運行crawl = CrawlCache.find(x)我想crawl.results不爲字符串而是JSON.parse(crawl.result, object_class: OpenStruct)

我的代碼到目前爲止的結果是這樣的:

after_initialize :set_results 


    def set_results 
    self.results = JSON.parse(self.results, object_class: OpenStruct) 
    end 

但是,當我運行上述crawl = CrawlCache.find(x)時,crawl.results.class仍然是一個字符串。

我想覆蓋orignial是內存的原因的原因,字符串是相當大的,我不希望在內存中的串並分析對象。這就是爲什麼我不打算在attr_accessor路線並將其命名爲別的東西。

回答

2

Rails允許你序列化和反序列化對象,如JSON沒有任何額外的努力或代碼。當您保存對象

class CrawlCache 
    serialize :results, JSON 

現在,它會序列化JSON,當你調用列,您可以訪問它,你將一個對象:你可以簡單地添加到您的模型。

http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html

這將實現你想要的東西,而無需自定義的回調添加到您的模型。