我创建了3个模型:
我遇到的问题是我对活动记录技术还不熟悉,我不明白定义所有内容的正确方法。目前,我认为这是错误的,我有一个
ArticleTag
belongs_to :article
belongs_to :tag
现在,从这里我的想法就是添加
Article
:has_many :tag
我不确定我是否正确接近这一点。谢谢你的帮助!
答案 0 :(得分: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
答案 1 :(得分: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.)
答案 2 :(得分:0)
在我的头顶,文章应该是:
has_many :article_tags
has_many :tags, :through => :article_tags