4

我创建了 3 个模型:

  • 文章:包含一篇文章
  • 标签:包含标签
  • ArticleTag:用于将多对一标签与文章关系相关联。它包含一个 tag_id 和一个 article_id。

我遇到的问题是我对主动记录技术还很陌生,而且我不明白定义一切的正确方法。目前,我认为是错误的,是我有一个

ArticleTag
 belongs_to :article
 belongs_to :tag

现在,从这里我的想法是然后添加

  Article
   :has_many :tag

我不确定我是否正确地接近这个。谢谢您的帮助!

4

3 回答 3

10

这取决于您是否需要连接模型。连接模型允许您针对两个其他模型之间的关联保存额外信息。例如,也许您想记录文章被标记的时间戳。该信息将针对连接模型进行记录。

如果您不想要连接模型,则可以使用简单的has_and_belongs_to_many关联:

class Article < ActiveRecord::Base
  has_and_belongs_to_many :tags
end

class Tag < ActiveRecord::Base
  has_and_belongs_to_many :articles  
end

使用Tagging连接模型(比 更好的名称ArticleTag),它看起来像这样:

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

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

class Tagging < ActiveRecord::Base
  belongs_to :article
  belongs_to :tag
end
于 2009-12-15T15:03:32.573 回答
5

你应该has_many在关系是单向的时候使用。一篇文章有​​很多标签,但标签也有很多文章,所以不太对。更好的选择可能是has_and_belongs_to_many:一篇文章有​​很多标签,这些标签也引用文章。A belongs_to B表示 A 引用 B;A has_one B表示 B 引用 A。

以下是您可能会看到的关系的摘要:

Article
  has_and_belongs_to_many :tags   # An article has many tags, and those tags are on
                                  #  many articles.

  has_one                 :author # An article has one author.

  has_many                :images # Images only belong to one article.

  belongs_to              :blog   # This article belongs to one blog. (We don't know
                                  #  just from looking at this if a blog also has
                                  #  one article or many.)
于 2009-12-15T15:01:53.713 回答
0

在我的脑海中,文章应该是:

has_many :article_tags
has_many :tags, :through => :article_tags
于 2009-12-15T15:02:57.143 回答