Rails:我应该使用STI吗?

时间:2012-12-14 15:36:36

标签: ruby-on-rails ruby oop database-design sti

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

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

  1. 主题和帖子没有连接(每个模型都有“num_of_likes”,“num_of_dislikes”)
  2. 主题继承帖子。
  3. 主题和后继继承自基础模型,例如可以称为LikeableObj。
  4. 这三个选项中哪一个最适合我的需要?
    我没有考虑过第四种选择吗?
    如果我希望将来有第三个可以喜欢的模型怎么办?

1 个答案:

答案 0 :(得分:1)

我假设您想要跟踪用户是否喜欢某个帖子或主题,因此我会为将用户连接到帖子或主题的相似内容制作连接模型。

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

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

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