0

我想介绍我的情况,并知道我是否应该使用STI解决方案。
我正在创建一个留言板网站,到目前为止,我有几个模型:用户、主题、帖子..
明确表示:帖子就像对主题的评论。主题有标题和内容。帖子只有内容。

现在,用户可以选择喜欢/不喜欢帖子或主题。我想了三个选择:

  1. 主题和帖子没有联系(每个模型都有“num_of_likes”、“num_of_dislikes”)
  2. 主题继承 Post。
  3. Topic 和 Post 继承自一个基本模型,例如可以称为 LikeableObj。

这三个选项中哪一个最适合我的需求?
有没有我没有想到的第四个选项?
如果我希望将来有第三个可以被喜欢的模型怎么办?

4

1 回答 1

1

我假设您想要跟踪用户是否喜欢某个帖子或主题,所以我会为喜欢创建一个连接模型,将用户连接到帖子或主题。

class Like < ActiveRecord::Base
  belongs_to :user
  belongs_to :liked_obj, polymorphic:true, counter_cache:true
end

由于 like_obj 是多态的,它可以是帖子或主题。然后,您可以放置has_many :likes​​这些模型和列likes_count,它将作为计数器缓存自动更新。

如果您有任何代码处理 Post 和 Topic 之间常见的喜欢,请将其放在 a 中module Likeable并将其包含在两个类中。

于 2012-12-14T16:06:45.627 回答