2010-09-30 135 views
27

我正在創建一個監視幾個模型的AuditLog觀察器。Rails 3 - 如何創建一個JSON對象來存儲在數據庫中

我希望觀察者有一個after_create,它創建一個存儲在數據庫列中的JSON對象。它將包含數據像{photoid:123,photoname:「asdasd」,creator_id:「asdasd」}等...

在Rails中,如何創建這種類型的JSON對象,然後如何將其插入數據庫以及其他非JSON字段?

感謝

回答

9

首先,肯定檢查了ActiveRecord的序列化,看看它做你需要什麼:http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-serialize

但是,如果你需要專門的JSON(連載使用YAML默認情況下),那麼你可以隨時僞造它手工製作。

您可以簡單地在Ruby中構建一個散列,然後在將其分配給模型屬性之前調用to_json

data = { 'photoid' => 123, 'photoname' => "asdasd", 'creator_id' => "asdasd" } 
myrecord.stored_data = data.to_json 
myrecord.save 
+0

謝謝,我會試試看。 – AnApprentice 2010-09-30 22:00:33

+0

是to_json安全嗎?我在Google搜索中看過一些提到它有時會失敗的帖子?對此有何想法? – AnApprentice 2010-09-30 22:08:22

+0

當你在activerecord對象上使用'to_json'時(你應該使用'as_json'或某物),有一些皺紋,但是爲了序列化一個簡單的哈希,它真的很簡單JSON編碼......沒有太多錯誤。你在谷歌上找到了什麼? – tfe 2010-10-01 01:22:13

57

當前版本的rails支持開箱即用的json序列化。在遷移中將字段定義爲字符串(或文本),然後:

class Foo < ActiveRecord::Base 
    serialize :field, JSON 
end 

bar = Foo.new 
bar.field = [1,2,3] 
bar.save 
+19

將其定義爲文本可能會更好,否則255個字符的限制可能會導致問題。 – thesmart 2013-11-29 19:40:50

+2

如果由於某種原因(如果該記錄被json化時仍然會看到諸如'{\「abc \」:\「123 \」}之類的東西),那麼會出現什麼問題? – K2xL 2017-01-18 23:09:05

相關問題