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 :through
和has_and_belongs_to_many
,如果你想添加描述的关系,然后使用数据Rails的引导然而详细地解释了这两个选项之间的差异,has_many :through
以及您可以访问连接两个模型.
这就是has_many:通过看起来像:
归档时间: |
|
查看次数: |
9495 次 |
最近记录: |