将类序列化为activerecord字段

时间:2013-11-02 23:43:32

标签: ruby json activerecord serialization

我尝试了一些不同的搜索,但我不确定如何正确地说出问题。想象一下,我有一个db表创建迁移,如下所示:

def self.up
    create_table :users do |t|
       t.string :name, :null => false,
       t.text :statistics
    end        
end

示例用户类

class User
    serialize :statistics, JSON

    def statistics
        self.statistics
    end

end

但我希望self.statistics成为类Statistics的实例

class Statistics
    @stats = {}

    def set(statistic, value)
        @stats[statistic] = value
    end

    def to_json(options)
        self.to_json(:only => @stats)
    end
end

(或类似的东西)

最终,我想要发生的是我希望能够添加特定于Statistics的方法来管理该字段中的数据,但是当我保存User对象时,我希望它转换该Statistics类的实例转换为JSON字符串,保存在数据库中。

我来自PHP背景,这种事情非常简单,但我很难弄清楚如何使用ActiveRecord(我没有太多经验)。

想法?

注意:这不是Rails ......只是直接的Ruby

1 个答案:

答案 0 :(得分:0)

你需要它是JSON吗?如果没有,将它序列化为YAML将允许您轻松地将对象编组回原始类。

ActiveRecord::Base#serialize有两个参数:attributeclass。如果定义了class,则数据必须反序列化为指定类型的对象。这是一个cool example of it in action

  

默认情况下,您的属性将序列化为YAML。我们说你   像这样定义MyField:

     

类MyField

     

     

它会像这样序列化:

     

---!ruby / object:MyField {}

     

它将反序列化回MyField实例。