4

3 つのモデルを作成しました。

  • 記事: 記事を含む
  • タグ: タグが含まれています
  • ArticleTag: 多対 1 のタグを記事の関係に関連付けるためのものです。これには、tag_id と article_id が含まれています。

私が抱えている問題は、私がアクティブ レコード テクノロジにかなり慣れていないことと、すべてを定義する適切な方法を理解していないことです。現在、私が間違っていると思うのは、

ArticleTag
 belongs_to :article
 belongs_to :tag

さて、ここから私の考えは、追加することでした

  Article
   :has_many :tag

これに正しくアプローチしているかどうかはわかりません。助けてくれてありがとう!

4

3 に答える 3

10

結合モデルが必要かどうかによって異なります。結合モデルを使用すると、他の2つのモデル間の関連付けに対して追加情報を保持できます。たとえば、記事にタグが付けられたときのタイムスタンプを記録したい場合があります。その情報は、結合モデルに対して記録されます。

結合モデルが必要ない場合は、単純な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 BAがBを参照することを意味します。A has_one BBが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 に答える