如何在我的ruby on rails应用程序中实现喜欢/ + 1种功能?

时间:2012-06-06 14:04:56

标签: ruby-on-rails ruby ruby-on-rails-3 rubygems ruby-on-rails-3.2

我即将为我正在处理的个人项目添加+ 1 /喜欢功能。我想知道数据库设计的外观。我不希望有几个像桌子,但有一个像桌子来处理网站上的所有喜欢。我希望能够“随时”插入网站的不同部分。

E.G。

Microposts - 用户应该能够“喜欢”微博

照片 - 用户应该能够“喜欢”照片

假设我创建了一个游戏部分,希望用户能够喜欢我想要使用现有的喜欢桌子的游戏,而不是为游戏创建一个喜欢的桌子。

在我的脑海里,我认为acts_as_tree插件会非常有用,但是在一段时间之后保存在一个表中的东西会变得混乱吗?

如何以最明智的可扩展方式将喜欢的功能添加到我的应用中?

2 个答案:

答案 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)