【发布时间】:2012-05-21 10:28:32
【问题描述】:
我有两个模型、项目和类别,它们使用 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:缺少属性:类别
我是否误解了 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
【问题讨论】:
-
这里的内容看起来不错,并且关联应该可以双向工作。
@item是如何分配的? -
我刚刚将您的代码粘贴到了一个测试项目(Rails 3.2.1)中,并且该关联对我来说都很好。
-
通常在执行 Model.select("something").first.somethingelse 时会抛出 MissingAttribute 异常。您可以将您正在运行的代码和回溯粘贴到 git 中吗?
-
x1a4 - 我编辑了我的帖子以包含有关我如何分配
@item和@category的信息,我认为这可能是我出错的地方。 -
@steffi2392 应该只需要其中一项分配。因为它是一个双向关联,设置一个应该照顾另一个。另请参阅@bcd 所说,关于此异常通常来自使用
select来限制返回的列数。在我见过的时候,这几乎总是造成这种情况的原因。
标签: ruby-on-rails ruby associations has-and-belongs-to-many