Rails里实现多对多有两种方式:
1,has_and_belongs_to_many
[code]
# in migration
def self.up
create_table 'categories_products', :id => false do |t|
t.column :category_id, :integer
t.column :product_id, :integer
end
end
# models/product.rb
has_and_belongs_to_many :categories
# models/category.rb
has_and_belongs_to_many :products
[/code]
这是最直接的多对多,用中间表categories_products来连接category和product,并且中间表里没有其他字段信息
2,has_many :through
[code]
# models/categorization.rb
belongs_to :product
belongs_to :category
# models/product.rb
has_many :categorizations
has_many :categories, :through => :categorizations
# models/category.rb
has_many :categorizations
has_many :products, :through => :categorizations
[/code]
has_many :through这种方式跟habtm的不同是中间表里可以含有其余的字段信息,并且中间表在Model里明确指出
1,has_and_belongs_to_many
[code]
# in migration
def self.up
create_table 'categories_products', :id => false do |t|
t.column :category_id, :integer
t.column :product_id, :integer
end
end
# models/product.rb
has_and_belongs_to_many :categories
# models/category.rb
has_and_belongs_to_many :products
[/code]
这是最直接的多对多,用中间表categories_products来连接category和product,并且中间表里没有其他字段信息
2,has_many :through
[code]
# models/categorization.rb
belongs_to :product
belongs_to :category
# models/product.rb
has_many :categorizations
has_many :categories, :through => :categorizations
# models/category.rb
has_many :categorizations
has_many :products, :through => :categorizations
[/code]
has_many :through这种方式跟habtm的不同是中间表里可以含有其余的字段信息,并且中间表在Model里明确指出