In Rails, Verwendung von Mongoid, Wie finde ich alle Modelle mit einer gültigen (nicht Nil) has_one Referenz?

8

Also habe ich zwei Modelle wie dieses

%Vor%

Angenommen, ich habe eine persistente Instanz von ModelParent namens mp in der rails-Konsole

%Vor%

und dann

%Vor%

gibt ein gültiges Objekt zurück

Wenn ich jedoch so danach suche:

%Vor%

gibt 0 zurück

Ich habe versucht, model_child zu erstellen und dann zuzuweisen, auch mit build_model_child (), und jede Methode zeigt model_child ist eindeutig im Eltern, aber die Abfrage für nicht nil (.ne) findet nicht alle ModelParents mit Kindern.

Was mache ich falsch?

Aktualisierung:

Beantworte meine eigene Frage. Ich bin mir immer noch nicht sicher warum: model_child.ne = & gt; nil funktioniert jedoch nicht ...

Ich habe das Problem gelöst, indem ich etwas so codiert habe:

%Vor%     
KDKotU 08.04.2012, 22:39
quelle

3 Antworten

8

Es funktioniert nicht, da der Fremdschlüssel auf der Seite der Beziehung gespeichert ist. Also, in Ihrem Fall wird ModelChild collection ein Feld model_parent_id haben und nicht umgekehrt. Ich nehme an, Sie haben das schon herausgefunden, aber anstatt es so zu lösen, wie Sie es getan haben, würde ich vorschlagen, dass Sie die Assoziationen has_one und belongs_to umschalten und dann:

verwenden %Vor%     
rubish 09.04.2012, 10:15
quelle
0

Ich würde mich nicht auf die .ne in solchen Fällen verlassen, fand ich, dass .ne Methode nicht immer gut funktioniert: Versuchen Sie beispielsweise, eine Zeichenfolge mit dem Namen "false" einzufügen, und suchen Sie danach mit .ne; -)

Ich fand heraus, dass für solche Fälle der beste Weg, die richtigen Modelle zuverlässig zu finden, die Filterung nach nativem Mongo $type

ist %Vor%

Unter der Liste der bekannten Typen wurde das Finden von fehlerhaften Feldern viel effizienter gefunden

  • Doppel 1
  • Zeichenfolge 2
  • Objekt 3
  • Array 4
  • Binärdaten 5
  • Nicht definiert (veraltet) 6
  • Objekt-ID 7
  • Boolesch 8
  • Datum 9
  • Null 10
  • Regulärer Ausdruck 11
  • JavaScript 13
  • Symbol 14
  • JavaScript (mit Umfang) 15
  • 32-Bit-Ganzzahl 16
  • Zeitstempel 17
  • 64-Bit-Ganzzahl 18
  • Min.-Taste 255
  • Max-Taste 127
Inoperable 12.03.2014 22:46
quelle
0

Ich habe einen anderen Weg gefunden, aber ich weiß nicht, ob es effizienter oder weniger ist: Sie können die Zurückweisungsmethode verwenden. Zum Beispiel:

%Vor%     
Alberto Zuin 12.05.2014 12:37
quelle

Tags und Links