在具有相同数据类型的rails中创建多个关系

时间:2010-03-29 19:45:20

标签: ruby-on-rails database database-relations

我想做的是这样的:

我有数据类型“user”和“article”。我想在这两者之间建立关系,但不止一种方式。

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

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

2 个答案:

答案 0 :(得分:0)

我建议Bookmarking模型bookmarking_type(注意type是为RoR保留的)。然后,您可以has_many :bookmarkingshas_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

在掌握基础知识后要注意的事项: 反缓存 - 如果你在做计数,他们就是你的朋友。

使用这两个连接模型而不是尝试现在深入研究多态,这可能更简单,更清晰。在你完成并运行后,你可以探索下一步。