2012-05-13 88 views
3

我有两个模型,项目和类别使用has_and_belongs_to_many关联具有多对多关系。困惑于Rails 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,我可以做

@item.categories 

@category.items 

我认为我能找到一个给定项目@item关联的类别找到它的所有项目

但是我得到的说 ::加载ActiveModel的MissingAttributeError错误:缺少属性:我误解类

如何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

你在这里看起来好看,关联*应该*双向工作。如何分配'@ item'? – x1a4

+0

我刚刚将你的代码粘贴到一个测试项目(Rails 3.2.1)中,并且这种关联对我来说都很好。 –

+3

当你做一个Model.select(“something”)时,通常会抛出MissingAttribute异常first.somethingelse。你可以在git中粘贴你正在运行的代码和backtrace吗? – bcd

回答

0

关联,我认为我已经经历了你通过一次去之前什么。我相信混淆是如何通过其他表连接。在下面,一个用户可以有很多技能。技能也与许多用户相关联。类似这样的东西可能对你有用^ _^

​​