2011-09-21 63 views
1

對不起,標題很不清楚 - 我只是不確定如何在不解釋的情況下對問題進行描述。在Rails中只能有一個孩子的父模型?

我想用我的應用程序記錄鍛鍊。我想鍛鍊表(我稱之爲家長),有基本信息,如日期和sub_workout_type_id

一個鍛鍊記錄可以有一個心血管鍛鍊(一個模型)或力量鍛鍊(另一個模型)。

我的想法有3張桌子,而不是隻有2個Cario鍛鍊模型和力量鍛鍊模型,我可以通過拉動鍛鍊記錄拉動任何類型鍛鍊的飼料,然後根據需要深入挖掘。

也許有更多的ruby-ish方式來做到這一點?因爲現在我不知道怎麼說has_one_model_or_the_other。謝謝!

回答

2

我看到兩個選項,你可以使用STI(單表繼承):在這種情況下,你將有一個能夠同時包含心血管模型或力量訓練和一個類型的表。這隻有在兩種模式具有共同特徵時纔有效。

另一種解決方案是寫類似

has_one :cardiovascular 
has_one :strength 

,然後使用驗證來執行,只有其中的一個設置。

希望這會有所幫助。

+0

我喜歡使用STI的想法 - 我不知道這是可用的。我有一個問題是關於表現。假設cario有25個領域並且實力有25個 - 你會預測在一個表中查詢花費更長時間還是效率更低?另外,我可以爲每種類型編寫遷移,就像我是普通模型一樣嗎?或者我可以只爲鍛鍊書寫遷移嗎?對不起,1條評論有2個問題! – Rapture

+0

效率的差異可能不會引起注意,但它很容易找到一些真實世界的數字。遷移不是特定於模型的 - 任何遷移都可以包含任何信息,任何表,多個表等等。 –

+0

感謝@DaveNewton對此進行清理。我會給它一個! – Rapture

0

正如@nathanvda所說,STI可能是一個不錯的選擇。

如果您希望在模型中存儲班級特定數據,可以查看Modeling inheritance with Ruby/Rails ORMs以查看該答案是否提供了關於如何爲這種關係建模的任何建議。

請注意,這裏的例子使用has_many's,但很多想法都是相似的。

相關問題