2013-10-17 70 views
0

我開始着手銷售不同類型的車輛的新的3.2 rails(理想情況下喜歡在MySQL上)項目。我們從模型汽車,摩托車和拖車開始。我正在考慮讓Vehicle類處理公共方面(如is_enabled),然後爲每個子類(如has_one:motorcycle_profile)創建一個配置文件。如何建模這種關係

class Vehicle < ActiveRecord::Base 
    attr_accessor :is_enabled, :year # 
end 

class Motorcyle < Vehicle 
    has_one :motorcycle_profile 
end 

class MotorcyleProfile < ActiveRecord::Base 
    attr_accessor :front_tire # something motorcycle specific 
end 

... 

這聽起來像是一個合理的方法嗎? STI會幫助解決這個或那個問題,而不是它的價值?

THX的幫助

回答

0

我用這種網上商店軟件的經驗是,你罕需要1種產品的表現比其他類型的產品不同。畢竟,他們都可以用價格,產品代碼和一些照片以幾乎相同的方式購買。但是,您可能希望在不同種類的產品中包含不同的屬性。

例如,自行車上的燃料類型屬性毫無意義,而汽車上的踏板屬性同樣毫無意義。與其創建不同的ActiveRecord模型來將不同的屬性拼湊到不同的表中,我認爲您應該考慮將共享屬性放在普通列中,然後將自定義數據放入哈希存儲中,該存儲由Rails 4和Postgres支持。

它基本上允許您爲每個單獨的產品記錄擁有一組不同的屬性。

+0

thx Niels,我得到你要去的那個概念。老實說,我還沒有跳到Rails 4和Postgres(可能會做3.2和MySQL)。但我會研究這些建議。我會有點擔心,但在散列存儲中搜索,範圍等。另外,對於新開發者來說可能有點不透明。但是這些事情隨着時間而改變。 – timpone

+0

Postgres爲查詢個人自定義屬性提供支持。 –