【问题标题】:How do I implement a likes/+1 kind of feature in my ruby on rails app?如何在我的 ruby on rails 应用程序中实现喜欢/+1 类型的功能?
【发布时间】:2012-06-06 14:04:55
【问题描述】:
我即将在我正在处理的个人项目中添加 +1/赞功能。我想知道为此的数据库设计可能是什么样子。我不想有几个类似的表格,而是一个类似的表格来处理整个网站的所有喜欢。我希望能够在网站的不同部分创建或随意“插入”它们。
例如
微博 - 用户应该能够“喜欢”微博
照片 - 用户应该能够“喜欢”照片
假设我创建了一个游戏部分并希望用户能够喜欢游戏我希望能够使用现有的点赞表而不是为游戏创建点赞表。
在我的脑海里,我认为acts_as_tree 插件会非常有用,但是在一个喜欢表中保留一段时间后会变得混乱吗?
如何以最合理的可扩展方式将点赞功能添加到我的应用中?
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-3
rubygems
ruby-on-rails-3.2
【解决方案1】:
看看polymorphic associations。
提供的链接中的示例讨论了 cmets,但我认为您想要同样的东西,喜欢。
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 获取相关对象(帖子或微博)。
【解决方案2】:
您应该有一个“喜欢”模型或其他东西,至少具有以下关联:
属于_to:用户
属于_to :liked_object, :polymorphic => true
现在可以了
Like.create :liked_object => micropost, :user => current_user
在未来
Like.create :liked_object => game, :user => current_user
搜索多态关联(您可能需要在迁移中使用 like_object_type 和 like_object_id)