我看了这 2 篇博文,对 RoR 中的 has_many 关系感到有些晦涩:
在这个: http: //kconrails.com/2010/01/16/many-to-many-relationships-in-ruby-on-rails/,在“has_many :through”部分,作者说迁移文件连接表贡献是这样的:
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访问它。
在第二篇文章中: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)吗?
例如,如果我有制造商和产品等多对多关系模型,我想跟踪价格,我应该把它放到完整的表中,对吗?但是如果我只想添加一个属性而不是像Original_From那样跟踪它(显示产品的生产地),我只需要放入连接表吗?
我可以这样概括它:当属性数量有限且不重要时,请使用连接表。当属性的数量很多并且我们想要跟踪时,我们将使用完整的表。这是正确的吗?
当我们访问数据时有什么区别?就像我想访问上面示例中的价格或位置一样?
我仍然不清楚完整表和连接表之间的区别。请给我一些想法。非常感谢你!