2014-06-09 101 views
0

我正在閱讀關於Angular.js的這個tutorial,我試圖在Ruby on Rails上用Mongoid實現它,用於教育目的。mongoid模型中的靜態子字段

在本教程中,數據存儲在.json文件,下面這種格式(只是其中的一部分,爲圖片):

{ 
    "additionalFeatures": "MOTOBLUR-enabled; battery manager; seven home screens; customize by moving or resizing widgets; Android HTML WebKit w/Flash Lite; BACKTRACK\u2122 navigation pad behind screen", 
    "android": { 
     "os": "Android 2.1", 
     "ui": "MOTOBLUR" 
    }, 
    "availability": [ 
     "T-Mobile,", 
     "Telus" 
    ], 
    "battery": { 
     "standbyTime": "267 hours", 
     "talkTime": "5 hours", 
     "type": "Lithium Ion (Li-Ion) (1170 mAH)" 
    }, 

我的問題是:

我知道我可以爲「android」鍵(等等)創建另一個模型,其中包含兩個字段「os」和「ui」的散列。這些字段總是相同的。不過,我認爲這有點矯枉過正。我想在主模型中添加它們(我們稱之爲「Phone」)會更高效,即避免使用embedded_in,embeds_one與其他模型的關係。

有沒有辦法在不使用其他模型的情況下實現embeds_oneembeds_many的功能?

喜歡的東西(不正確的,但要指出的):

field :additionalFeatures, type: String 
field :android do 
    field :os, type: String 
    field :ui, type: String 
end 
+0

顯然,我會盡快刪除這個問題。看起來它的唯一功能是嵌入模型。除非發生激進事件,否則這個問題將在今天晚些時候刪除。 –

回答

0

如何使用Hash作爲字段類型:

field :android, type: Hash, :default => {os: '',ui: ''} 
+0

好的,我已經看到了,但是如何定義散列中的字段?有沒有辦法做到這一點? –

+0

您可以添加默認設置 – user2503775

+0

是的,這是一個映射它的好方法。但看起來,如果我想驗證它,它不提供任何功能。顯然,我必須使用嵌入式模型。 –