0

我正在尝试做的是这样的:

例如,我有数据类型“用户”和“文章”。我想在这两者之间建立关系,但方式不止一种。

例如,我想让用户“喜欢”或“收藏”一篇文章。所以我需要在数据库中有两种关系,一种用于喜欢文章的用户,另一种用于用户收藏,因此例如制作“user_article”表是不够的,对吗?

这样做的最佳方法是什么?

4

2 回答 2

0

我建议Bookmarking有的模型bookmarking_type(注意type是为 RoR 保留的)。然后你可以has_many :bookmarkingsandhas_many :liked_articles, :through => :bookmarkingshas_many :bookmarks, :through => :bookmarkings。当然,您应该添加条件或只是将 SQL 加入这些关联,但一切都应该是好的。我确实相信甚至有插件,只是想不起名字atm。

于 2010-03-29T19:59:33.867 回答
0

您所描述的是“数据模型”而不是“数据类型”。数据类型 = 字符串、整数等。如果它是一个 Active Record 对象,它是一个数据模型或更具体地说是一个 Active Record 模型。

Eimantas 指出您描述的是 2 个“has_many”关系,而不是他帖子中所写的“have_many”。在他的示例中,书签称为连接模型。请记住,您可以在连接模型中放置其他内容并使用其中的关系来完成任务。假设您想要一个书签订单或一个最喜欢的排名 - 连接模型是这个的理想点。

精简示例:

class Article < ActiveRecord::Base
  has_many :users, :through => :user_bookmarks
end

class UserBookmark < ActiveRecord::Base
  belongs_to :user
  belongs_to :article
end

class User < ActiveRecord::Base
  has_many :user_bookmarks
  has_many :articles, :through => :user_bookmarks
end

掌握基础知识后要注意的事项: 计数器缓存 - 如果您正在计数,它们是您的朋友。

只使用这 2 个连接模型而不是现在尝试深入研究多态性可能更容易和更清晰。在你启动并运行它之后,你可以接下来探索它。

于 2010-03-30T16:13:24.473 回答