2012-01-04 20 views
0

Rails newbieはここにあるので、私はこの権利を確実にしたいと思っています。私はいくつかの複雑な関係を持っていて、これらの関係をmysql行にローカルにキャッシュしたいと考えています。 facebookのような機能が好きだと思ってください。私はこの情報を現在mysqlテーブルに持っています。私はテキストであり、jsonとして保存された "liked_ids"列を入れようとしていました。そして、のようなアクセサを持っている:オブジェクトのフォーマットを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

+0

自分でオブジェクトをシリアライズ/デシリアライズする手間を省きます。 – clyfe

1

なぜテーブルと別モデルを使用しないのですか?

ユーザーは

クラスのユーザーをpost_idの、ポスト

users_posts ---> user_idのが好きであり、多くの同類(ポストへのクラスのオーバーライド)

に属している私はとの関係データを格納しないでしょうリレーショナルデータベースを使用している場合は、

+0

だから、モデルは元の質問よりはるかに複雑で、コールバックを介して同期を維持しています。あなたの考えに同意した。 – timpone

+1

@timpone:これはもっと複雑ではありません。直列化された列で参照整合性を維持しようとすると、*複雑な*の意味をより深く理解できます。 –

+0

ここで何かが失われています。これは基本的に、ソース表の参照整合性を維持しながら、結果をユーザー表にキャッシュします。これ以上何もない。 thx – timpone

関連する問題