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