我在STI,多態關聯或類型表之間撕裂。我已經有一個帶有以下字段的單位表:rails - 多態關聯或單表繼承
name
account_id
speed_limit
is_speeding
activation_state
unit_status_id
實際上有三種不同的單位:gps單位,石油單位和冰箱單位。當用戶登錄時,其網頁有條件地根據它是哪個單元而改變。這三個單位都有一個帳戶,activation_state和unit_status_id等字段。但只有GPS單位有一個speeding_limit或is_speeding領域。
我應該使用多態關聯:
class Unit
belongs_to :unitable, :polymorphic => true
end
class RefrigeratorUnit < ActiveRecord::Base
has_one :units, as: => :unitable
end
class OilUnit < ActiveRecord::Base
has_one :units, as: => :unitable
end
class GpsUnit < ActiveRecord::Base
has_one :units, as: => :unitable
end
或者我應該使用單表繼承?
class Unit < ActiveRecord::Base
end
class GpsUnit < Unit
end
class RefrigeratorUnit < Unit
end
class OilUnit < Unit
end
起初我傾向於STI,但冰箱和油單位沒有速度的限制,這意味着他們將永遠是空values.So我開始實施態關聯,但後來意識到GPS單元,油壓單元,否則冰箱單位將永遠不會擁有has_many單位。換句話說,它將永遠是一個關係,並且當用戶創建一個gps單元時,例如,一個單元也將被創建。這似乎有點多餘。所以我被撕裂了。
確實沒有「檔案」。這只是一個糟糕的命名。真的有GpsUnit,OilUnit和RefrigeratorUnit。爲什麼你更喜歡STI多態關聯?這真是我的問題。 – JohnMerlino
我其實不這樣做,只是因爲我無法完全理解這裏的模型。 – DeeY
我編輯了我的問題。沒有配置文件。我完全刪除了配置文件的任何參考。這裏只有三個對象:gpsunit,refrigeraterunit和oilunit。他們的大多數屬性都是一樣的。但是,gpsunit加快了其他人沒有的屬性。我認爲多態關聯更靈活,因爲它允許您創建具有自己列的不同表格。但是,當用戶創建一個單元時,我將不得不在單位表和gpsunits表中插入一條記錄,例如,這看起來沒有必要。所以這就是爲什麼我想到STI。 – JohnMerlino