4

我有两个模型、项目和类别,它们使用 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 关联的类别

@item.categories

但是我收到一条错误消息,提示 ActiveModel::MissingAttributeError: missing attribute: 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
4

1 回答 1

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
于 2015-05-13T04:27:58.690 回答