我正在尝试做的是这样的:
例如,我有数据类型“用户”和“文章”。我想在这两者之间建立关系,但方式不止一种。
例如,我想让用户“喜欢”或“收藏”一篇文章。所以我需要在数据库中有两种关系,一种用于喜欢文章的用户,另一种用于用户收藏,因此例如制作“user_article”表是不够的,对吗?
这样做的最佳方法是什么?
我正在尝试做的是这样的:
例如,我有数据类型“用户”和“文章”。我想在这两者之间建立关系,但方式不止一种。
例如,我想让用户“喜欢”或“收藏”一篇文章。所以我需要在数据库中有两种关系,一种用于喜欢文章的用户,另一种用于用户收藏,因此例如制作“user_article”表是不够的,对吗?
这样做的最佳方法是什么?
我建议Bookmarking
有的模型bookmarking_type
(注意type
是为 RoR 保留的)。然后你可以has_many :bookmarkings
andhas_many :liked_articles, :through => :bookmarkings
和has_many :bookmarks, :through => :bookmarkings
。当然,您应该添加条件或只是将 SQL 加入这些关联,但一切都应该是好的。我确实相信甚至有插件,只是想不起名字atm。
您所描述的是“数据模型”而不是“数据类型”。数据类型 = 字符串、整数等。如果它是一个 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 个连接模型而不是现在尝试深入研究多态性可能更容易和更清晰。在你启动并运行它之后,你可以接下来探索它。