Rails:是否可以为has_and_belongs_to_many关联添加额外的属性?

Dav*_*son 19 activerecord model ruby-on-rails has-and-belongs-to-many

我的意思是,如果我有两个模型,通过has_and_belongs_to_many关联连接,我可以将其他数据存储在每个关联的连接表中吗?也就是说,额外数据不会是任何一个表中单个记录的一部分,而是它们之间的连接.

我的实际模型如下:

class Part < ActiveRecord::Base
  has_and_belongs_to_many :assemblies
  has_and_belongs_to_many :packages
  belongs_to :user

  validates :name, :user_id, :presence => true
end

class Package < ActiveRecord::Base
  has_and_belongs_to_many :parts
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

所以重点是每个部件都有许多包装,每个包装都有不同的部件.我要添加的是数量.这不是每个部件的数量,而是每个部件的每个包装的数量.

我在ActiveRecord中找不到如何做到这一点.如果我没有使用rails/activerecord,我只需要在连接表中添加一个数量列,它将部件与包相关联.我显然可以在迁移中进行此更改,但是如何使用ActiveRecord访问该值?

And*_*nic 28

简短的回答不,你不能与HABTM的关系.它仅用于简单的多对多关系.

您将需要使用has_many:through关系.在此方案中,您将创建一个连接模型(PartPackage),您可以在其中定义所需的额外属性.

class Part < ActiveRecord::Base
  has_many :part_packages
  has_many :packages, :through => :part_packages

  has_and_belongs_to_many :assemblies
  belongs_to :user

  validates :name, :user_id, :presence => true
end

class PartPackage < ActiveRecord::Base
  belongs_to :part
  belongs_to :package
end

class Package < ActiveRecord::Base
  has_many :part_packages
  has_many :parts, :through => :part_packages
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)


Dev*_*n M 14

有之间一个关键的区别has_many :throughhas_and_belongs_to_many,如果你想添加描述的关系,然后使用数据Rails的引导然而详细地解释了这两个选项之间的差异,has_many :through以及您可以访问连接两个模型.

这就是has_many:通过看起来像: 感谢Rails指南.