rails 中的多对多关系不使用belongs_to
. 相反,您想使用几个选项之一。第一个是has_and_belongs_to_many
:
# app/models/category.rb
class Category < ActiveRecord::Base
has_and_belongs_to_many :items
end
# app/models/item.rb
class Item < ActiveRecord::Base
has_and_belongs_to_many :categories
end
您需要在数据库中添加一个额外的连接表,迁移如下:
class AddCategoriesItems < ActiveRecord::Migration
def self.up
create_table :categories_items, :id => false do |t|
t.integer :category_id
t.integer :item_id
end
end
def self.down
drop_table :categories_items
end
end
您可以看到连接表的名称是其他两个表名称的组合。这些表必须按上述字母顺序提及,并且:id => false
需要在那里,因为我们不希望该表上有主键。它将打破铁路协会。
还有另一种更复杂的方法,例如has_many :through
您需要存储有关关系本身的信息。我写了一篇完整的文章,详细说明了如何使用这两种方法,以及何时使用它们:
Rails 中的基本多对多关联
希望对您有所帮助,如果您有任何其他问题,请与我联系!