これらの 2 つのブログ投稿を見て、RoR の has_many 関係について少しわかりにくいと感じています。
これで: http://kconrails.com/2010/01/16/many-to-many-relationships-in-ruby-on-rails/の「has_many :through」セクションで、著者はjoin table Contributionsは次のようなものです:
class CreateContributions < ActiveRecord::Migration
def self.up
create_table :contributions do |t|
t.references :artist
t.references :song
t.string :instrument
t.timestamps
end
...........
したがって、結合テーブルの移行は、 t.references :artistとt.references :songを使用して 2 つのテーブルArtistとSongを参照します。また、その曲の楽器アーティストの演奏などの属性にアクセスしたい場合は、結合テーブルContributionsを使用してアクセスできます。
2 番目の投稿: http://kconrails.com/2010/01/29/has_and_belongs_to_many-associations-in-ruby-on-rails/。セクション: 「has_many :through」では、著者がCategorizationsという名前の「本格的なテーブル」を紹介します。移行は次のようになります。
class CreateCategorizations < ActiveRecord::Migration
def self.up
create_table :categorizations do |t|
t.integer :category_id
t.integer :item_id
t.timestamps
end
...........
したがって、本格的なテーブルの移行では、 t.integer :category_idとt.integer :item_idによって 2 つのテーブル Category と Item が参照されます。また、タイムスタンプなど、このテーブルの 2 つの属性に関連するものに固有の属性にのみアクセスできます。上記のようにモデルに属性 ( t.string :instrumentなど)を追加できますか?
たとえば、ManufacturerやProductのような多対多のリレーション モデルがある場合、 Priceを追跡したいのですが、本格的なテーブルに入れる必要がありますよね? しかし、属性を 1 つだけ追加したいが、 Original_From (製品がどこで生産されたかを示す) のように追跡しない場合、結合テーブルに入れるだけでよいのでしょうか?
このように一般化できますか: 属性の数が限られており、追跡することが重要でない場合は、結合テーブルを使用します。属性の数が多く、追跡したい場合は、本格的なテーブルを使用します。それが正しいか?
データにアクセスするときの違いは何ですか? 上記の例で価格または場所にアクセスしたい場合はどうですか?
本格的なテーブルと結合テーブルの違いについてはまだ明確ではありません。アイデアを教えてください。どうもありがとうございました!