我正在实施一个应用程序来管理生产订单。每个订单都有很多工序(阶段),包括印刷和折弯。所有流程都有一些共同的属性,如数量和评论,以及一些特定于阶段的属性:
create_table :stages do |t|
t.integer :number
t.decimal :roll_width
t.decimal :quantity
t.string :comments
t.boolean :finished
t.timestamps
end
create_table :printing_stages do |t|
t.integer :color
t.decimal :technical_card
t.timestamp
end
create_table :bending_stages do |t|
t.decimal :flap_width
t.boolean :seal_distance
t.timestamps
end
我不确定这里要遵循的propper方法以便能够轻松访问它们的常见+特定属性。
如果我使用 STI,我最终会得到一个巨大的单表,因为某些阶段有 10 多个特定属性。
如果我将多态关联用作:
class Stage < ActiveRecord::Base
belongs_to :stageable, :polymorphic => true
end
class SlittingStage ActiveRecord::Base
has_one :stage, :as => stageable
end
class PrintingStage ActiveRecord::Base
has_one :stage, :as => stageable
end
那么我将不得不访问例如印刷阶段的评论,例如printing_stage.stage.comments
,恕我直言,相当繁琐且不那么优雅。
最后,我不确定使用 MTI 的含义和后果。
你能给我一些建议吗?