【发布时间】:2013-08-21 15:51:37
【问题描述】:
我正在开发一个应用程序来跟踪产品设计,但我的关联遇到了一些问题。基本上我有一个模型(Assembly),它需要具有多态关联,但也需要能够属于自己。
为了说明,我有三个模型:Product、Assembly 和 Part。
- 一个产品可以有多个程序集。
- 一个程序集可以有多个零件和程序集。
- 程序集属于产品或程序集。
- 零件属于装配体。
我的模型定义目前是这样的:
产品.rb
class Product < ActiveRecord::Base
belongs_to :product_family
has_many :assemblies, as: :assemblable
end
程序集.rb
class Assembly < ActiveRecord::Base
belongs_to :assemblable, polymorphic: true
has_many :parts
has_many :subassemblies, as: :assemblable
end
part.rb
class Part < ActiveRecord::Base
belongs_to :assembly
belongs_to :product_family
end
我想做的是,给定一个名为“top_assy”的程序集:
top_assy.subassemblies.create
但是,当我尝试这个时,我收到以下错误:
NameError: 未初始化的常量 Assembly::Subassembly
我显然在这里做错了什么 - 我错过了什么?我已经尝试将 'class_name: "Assembly"' 作为参数添加到 'has_many :subassemblies' 命令中。
提前致谢!
【问题讨论】:
-
我认为基本上我需要的是能够生成“多态连接表”的东西。所以它基本上是一个包含三列的连接表:“parent_type”、“parent_id”和“assembly_id”。然后,“parent_type”可以是“Product”或“Assembly”。
标签: ruby-on-rails activerecord polymorphic-associations self-join