RoR中这两个表之间的关系是什么?

时间:2010-07-20 13:55:04

标签: ruby-on-rails migration entity-relationship

我正在开发一个像stackoverflow这样的应用程序,这些问题或文章只有一个标签。一个标签必须有一个或多个文章。

所以,我在RoR的迁移中这样做。我认为哪种关系适合两种情况。在article表中,应该使用“has_many”,并且在tag表中,应该使用“has_many”。 但我想是有必要在中间添加一个表,比如....

所以,第一个是这样的:

class Article < ActiveRecord::Base
  has_many :tags
end

class Tag < ActiveRecord::Base
  has_many :articles
end

或类似的东西:

class Article < ActiveRecord::Base
  has_many :articleTagList
  has_many :tags, :through => : articleTagLists
end

class Tag < ActiveRecord::Base
  has_many :articleTagList
  has_many :articles, :through => :articleTagLists
end

class ArticleTagList < ActiveRecord::Base
  belongs_to :article
  belongs_to :tag
end

2 个答案:

答案 0 :(得分:1)

规范化数据库中的多对多关系始终需要第三个“查找表”。

如果你进行非规范化,你就可以在一个字段中使用标记id,并在它们之间加上分隔符。但是你还必须提供处理检索的逻辑。

我个人只是选择了标准化的选项。

答案 1 :(得分:0)

如果您不想在中间表上存储任何信息(例如,将标记X添加到问题Y的用户的名称),则可以使用has_and_belongs_to_many: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

如果您想存储某些内容,则需要创建中间模型,作为示例。在您的示例中,ArticleTagList模型应按照约定称为ArticlesTag,数据库表应为articles_tags。