Condividi
Documento incorporato (embedded) e non incorporato (no-embedded) contemporaneamente
Ho bisogno di un modello che si comporterà come incorporato e non incorporato. Ad esempio, se voglio archiviare questo modello come incorporato:
class MenuPosition
include Mongoid::Document
field :name, type: String
field :category, type: String
devo aggiungere
embedded_in :menu
ad esso.
D'altra parte, se aggiungo questa riga nel modello, non posso memorizzare questo modello come non incorporato:
position = {
"name" => "pork",
"category" => "meal",
"portion" => 100
}
MenuPosition.create(position)
Ricevo il seguente messaggio di errore:
NoMethodError:
undefined method `new?' for nil:NilClass
Posso usare, o esiste un modo di definire un modello per documenti incorporati (embedded) e non incorporati (no-embedded) in MongoDB?
In Corso
4
MongoDB
11-09-2019
1 Risposta
952 Visite
+1
Risposte ( 1 approvate )
Nel nostro progetto abbiamo avuto a che fare con una cosa simile. Quello che abbiamo fatto è stato definire i campi come un modulo. Un po' come quello mostrato qui di seguito:
Quindi nella tua classe in cui vuoi incorporare il modello, fai semplicemente:
Ed invece nella tua classe che desideri archiviare separatamente come documento non incorporato (non-embedded), procedi come segue:
Questo ha funzionato abbastanza bene nel nostro progetto per alcune cose. Tuttavia tieni presente che potrebbe non essere appropriato nel tuo caso, poiché hai esigenza di incorporarne molti. Questo funziona bene solo per incorporare uno. L'ho pubblicato comunque, eventualmente puoi partire da questo per cercare di migliorarlo ed adattarlo alle tue esigenze.