导轨中的多对多关系不使用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
。我已经写了整篇文章,详细说明如何做到这两种方法,以及何时使用每个:
Basic many-to-many Associations in Rails
我希望这会有所帮助,如果您有任何疑问请联系我!
这真的很有帮助!一个有用的补充是关于如何在代码中访问这些关系的一些示例(无论是在控制器还是视图中)谢谢 – msanjay 2014-02-14 08:51:04