我想做的是这样的:
我有数据类型“user”和“article”。我想在这两者之间建立关系,但不止一种方式。
例如,我想让用户“喜欢”或“书签”一篇文章。所以我需要在数据库中有两个关系,一个用于喜欢文章的用户,另一个用于用户书签,所以制作一个“user_article”表是不够的,对吗?
这样做的最佳方式是什么?
答案 0 :(得分:0)
我建议Bookmarking
模型bookmarking_type
(注意type
是为RoR保留的)。然后,您可以has_many :bookmarkings
和has_many :liked_articles, :through => :bookmarkings
以及has_many :bookmarks, :through => :bookmarkings
。当然你应该添加条件或者只是将SQL连接到这些关联,但一切都应该是好的。我相信甚至有插件,只是不记得名字atm。
答案 1 :(得分:0)
您所描述的是“数据模型”而不是“数据类型”。数据类型=字符串,整数等。如果它是活动记录对象,则更具体地说是数据模型或活动记录模型。
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
在掌握基础知识后要注意的事项: 反缓存 - 如果你在做计数,他们就是你的朋友。
使用这两个连接模型而不是尝试现在深入研究多态,这可能更简单,更清晰。在你完成并运行后,你可以探索下一步。