关于Rails has_and_belongs_to_many协会感到困惑

时间:2012-05-13 20:11:02

标签: ruby-on-rails ruby associations has-and-belongs-to-many

我有两个模型,项目和类别,它们使用has_and_belongs_to_many关联具有多对多关系。

在我的模特中我有

class Item < ActiveRecord::Base
    has_and_belongs_to_many :categories
end

class Category < ActiveRecord::Base
    has_and_belongs_to_many :items
end

我创建了一个连接表“categories_items”:

create_table "categories_items", :id => false, :force => true do |t|
    t.integer "category_id"
    t.integer "item_id"
end

我没有收到任何错误,但我对关联所允许的内容感到有些困惑。现在,如果我有一些类别@category,我可以通过

找到其中的所有项目
@category.items

我假设我可以通过

找到与给定项目@item相关联的类别
@item.categories

然而,我收到一条错误消息     ActiveModel :: MissingAttributeError:缺少属性:category

我是否误解了has_and_belongs_to_many关联的功能,或者我在代码中遗漏了什么?谢谢!

编辑 - 附加信息:

我认为混淆在于我应该如何分配项目/类别。目前,我正在独立创建它们:

@item = Item.new
... add attributes ... 
@item.save

@category = Category.new
... add attributes ... 
@category.save

然后将它们与

相关联
@category.items << @item
@item.categories << @category

1 个答案:

答案 0 :(得分:0)

我想我曾经历过你曾经经历过的事情。我相信混淆在于如何通过其他表连接。在下文中,一个用户可以拥有许多技能。技能也与许多用户相关联。类似的东西可能对你有用^ _ ^

class User < ActiveRecord::Base
  has_many :skills_users
  has_many :skills, through: :skills_users

class SkillsUser < ActiveRecord::Base
  belongs_to :user
  belongs_to :skill

class Skill < ActiveRecord::Base
  has_many :skills_users
  has_many :users, through: :skills_users