【问题标题】:strategy for writing format of object to mysql table将对象格式写入mysql表的策略
【发布时间】:2012-01-04 21:02:37
【问题描述】:

这里是 Rails 新手,所以只是想确保我做对了。我有几个复杂的关系,并希望将这些关系本地缓存在 mysql 行中。想想像facebook喜欢的功能。我目前在 mysql 表中有这些信息。我打算放入一个“liked_ids”列,它是文本并存储为 json。然后有一个像这样的访问器:

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

我看到有些人提到存储为 YAML,但已经使用了大量的 json。

然后当有人提交到主表时(比如 likes_users),我们只需添加一个回调来更新这个 json 字段。

是否有替代方案或者这似乎是一个合理的想法?

谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-3.1


    【解决方案1】:

    为什么不使用表格和单独的模型?

    用户喜欢帖子

    users_posts ---> user_id, post_id

    类用户拥有并属于许多喜欢(类覆盖到 Post)

    当您使用关系数据库时,我不会将关系数据存储为字段。

    【讨论】:

    • 所以模型比原始问题复杂得多,并且会这样做并通过回调保持同步。但同意你的想法。
    • @timpone:这实际上并没有更复杂,尝试使用序列化列保持引用完整性,您将更好地理解 complicated 的含义:)跨度>
    • 这里有些东西丢失了。这基本上是将结果缓存到用户表中,保持源表中的引用完整性。而已。谢谢
    【解决方案2】:

    您可以使用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]
    

    剩下的就是通过回调使列保持同步。

    【讨论】:

    • 我见过 serialize 但这让我不仅仅是处理 json 吗?
    • 省去你自己序列化/反序列化对象的麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2019-01-29
    • 2019-01-13
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多