3

我正在实施一个应用程序来管理生产订单。每个订单都有很多工序(阶段),包括印刷和折弯。所有流程都有一些共同的属性,如数量和评论,以及一些特定于阶段的属性:

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 的含义和后果。

你能给我一些建议吗?

4

1 回答 1

2

这位女士说得比我好。如果你跳到大约 20 分钟,那就是你的答案所在。

桑迪·梅斯(Sandi Metz)弄得一团糟

于 2013-01-18T22:23:39.190 回答