1

我想反序列化一個序列化對象。所以這是可能的,如(使用JSON)來處理:ActiveRecord對象序列化和反序列化到數據庫

>> 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]) 

你知道該怎麼做嗎?感謝您的任何幫助。

回答

0

我認爲這可能是爲簡單明瞭的:

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

謝謝你的回答。但是這不是,因爲我想通過ActiveRecord(或ActiveModel)加載到數據庫。 – 2010-07-06 07:40:14

0

你不能只是存儲的ID?這將允許您在任何地方流式傳輸ID,而不用擔心內容。

+0

不,我只是想在數據庫中加載一個序列化的對象(在YAML或JSON中)。有沒有更通用的方式:Article.create(ActiveSupport :: JSON.decode(@ article.to_json)[:article]),沒有指定「文章」? – 2010-07-06 07:29:34

+0

你在尋找serialize類的方法嗎? http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001799 – 2010-07-08 01:41:12