【问题标题】:ActiveRecord object serialization and deserialization to the databaseActiveRecord 对象序列化和反序列化到数据库
【发布时间】:2010-07-05 16:39:58
【问题描述】:

我想反序列化一个序列化的对象。所以可以处理比如(用JSON):

>> l = Yea.create(:title => "foo bar")
=> #<Yea id: 3, title: "foo bar", created_at: "2010-07-05 21:44:54", updated_at: "2010-07-05 21:44:54">
>> j = l.to_json
=> "{\"yea\":{\"created_at\":\"2010-07-05T21:44:54Z\",\"title\":\"foo bar\",\"updated_at\":\"2010-07-05T21:44:54Z\",\"id\":3}}"
>> Yea.delete(3)
=> 1
>> a = ActiveSupport::JSON.decode(j)
=> {"yea"=>{"created_at"=>"2010-07-05T21:44:54Z", "title"=>"foo bar", "updated_at"=>"2010-07-05T21:44:54Z", "id"=>3}}
>> Yea.create(a[:yea])
=> [#<Yea id: 4, title: "foo bar", created_at: "2010-07-05 21:44:54", updated_at: "2010-07-05 21:44:54">]

但我想写这个更通用一点,使用类似的东西:

ActiveRecord.create(a)

而不是:

Yea.create(a[:yea])

你知道怎么做吗?感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails json serialization activerecord ruby-on-rails-3


    【解决方案1】:

    我认为它可能像这样直截了当:

    require 'yaml'
    @article = YAML::load(@serialized_copy)
    

    【讨论】:

    • 感谢您的回答。但这不是,因为我想通过 ActiveRecord(或 ActiveModel)加载到数据库。
    【解决方案2】:

    你不能只存储 ID 吗?这将允许您在任何地方流式传输 ID,而无需打扰内容。

    【讨论】:

    • 不,我只想在数据库中加载一个序列化对象(在 YAML 或 JSON 中)。那么有没有更通用的方法:Article.create(ActiveSupport::JSON.decode(@article.to_json)[:article]),不指定“article”?
    • 您在寻找序列化类方法吗? api.rubyonrails.org/classes/ActiveRecord/Base.html#M001799
    猜你喜欢
    • 2018-06-27
    • 2016-10-14
    • 2014-12-24
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2015-10-06
    • 2020-02-24
    相关资源
    最近更新 更多