【问题标题】:Confused about Rails has_and_belongs_to_many Association对 Rails has_and_belongs_to_many 关联感到困惑
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2014-07-08
    • 2017-02-28
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多