我即将为我正在处理的个人项目添加+ 1 /喜欢功能。我想知道数据库设计的外观。我不希望有几个像桌子,但有一个像桌子来处理网站上的所有喜欢。我希望能够“随时”插入网站的不同部分。
E.G。
Microposts - 用户应该能够“喜欢”微博
照片 - 用户应该能够“喜欢”照片
假设我创建了一个游戏部分,希望用户能够喜欢我想要使用现有的喜欢桌子的游戏,而不是为游戏创建一个喜欢的桌子。
在我的脑海里,我认为acts_as_tree插件会非常有用,但是在一段时间之后保存在一个表中的东西会变得混乱吗?
如何以最明智的可扩展方式将喜欢的功能添加到我的应用中?
答案 0 :(得分:1)
看看polymorphic associations 链接中的示例提供了有关评论的说明,但我认为您希望使用相同的东西。
class Like < ActiveRecord::Base
belongs_to :likable, polymorphic: true
end
class Micropost < ActiveRecord::Base
has_many :likes, as: :likable
end
class Post < ActiveRecord::Base
has_many :likes, as: :likable
end
在这里,你的Post和Micropost类都可以有喜欢。你可以在你想要的任何课程中添加一些。
您甚至可以执行Like.all
,并且对于每个人来说,使用like.likable
获取相关对象(帖子或微博)。
答案 1 :(得分:1)
你应该有一个“喜欢”的模型或其他东西,至少有这种关联: belongs_to:用户 belongs_to:likes_object,:polymorphic =&gt;真
现在你可以做到
Like.create :liked_object => micropost, :user => current_user
以及未来
Like.create :liked_object => game, :user => current_user
搜索多态关联(您可能需要在迁移时使用likes_object_type和likes_object_id)