2012-01-04 36 views
0

Rails新手在這裏,所以只是想確保我做對了。我有一些複雜的關係,並希望在mysql行本地緩存這些關係。認爲像Facebook喜歡的功能。我目前在mysql表中有這些信息。我打算放入一個名爲「liked_ids」的文本文件並存儲爲json。再有一個像訪問:將對象格式寫入mysql表格的策略

def likes 
    str=self.liked_ids 
    b=JSON.parse(str) 
    return b 
end 

我看到有些人一提到存儲爲YAML代替,但有已被使用一噸JSON的。

然後當有人提交到主表(比如說likes_users)時,我們只是添加一個回調來更新這個json字段。

有沒有其他選擇,或者這似乎是一個合理的想法?

thx

回答

0

您可以使用serialize方法來定義序列化列。
序列化通過YAML完成。

class User < ActiveRecord::Base 
    serialize :liked_ids, Array 
end 

user = User.create(:liked_ids => [1, 2, 3]) 
User.find(user.id).liked_ids # => [1, 2, 3] 

剩下的就是通過回調來保持列同步。

+0

我見過序列化,但是這不僅僅是處理json,還能帶給我什麼? – timpone 2012-01-04 21:38:57

+0

節省您自己序列化/反序列化對象的麻煩。 – clyfe 2012-01-04 21:41:44

1

爲什麼不使用表格和單獨的模型?

用戶喜歡郵政

users_posts ---> USER_ID,POST_ID

類用戶具有屬於許多喜歡(類倍率到郵政)

我不會關係數據存儲爲一個當你使用關係數據庫的時候。

+0

所以這個模型比原來的問題複雜得多,並且會這樣做並且通過回調來保持同步。但同意你的想法。 – timpone 2012-01-04 21:24:59

+1

@timpone:這並不複雜,請嘗試使用序列化列保持參照完整性,您將更好地理解*複雜*意味着什麼:) – 2012-01-04 21:48:31

+0

這裏有些東西正在迷失。這基本上是將結果緩存到用戶表中,從而在源表中保持參照完整性。而已。 thx – timpone 2012-01-04 22:38:07