2016-04-11 7 views
0

Ich muss einen Bereich erstellen, der überprüft, ob zwei Felder auf dem Modell wahr ist, jedoch sollte es keine Datensätze enthalten, bei denen beide wahr sind, nur diejenigen, bei denen beide von ihnen sind. Ich hoffe das ergibt Sinn.bedingter Bereich basierend auf entweder zwei Felder wahr, aber nicht beide

Ich verwende Rails 3.2 und Mongo 3. Kann jemand einen Weg empfehlen, dies zu erreichen?

Mein erster Versuch hat

gewesen
scope :with_training_complete, where(
:volunteer_training_completed => true 
).or(:face_to_face_training_attended => true) 

aber das bringt wieder nur Datensätze, bei denen beide wahr sind.

jede Hilfe würde sehr geschätzt werden.

+0

'-umfang: with_training_complete, wo ("volunteer_training_completed = true OR face_to_face_training_attended = true")' - können Sie dies versuchen? – dp7

+0

@ dkp ich bekomme den folgenden Fehler Mongo :: OperationFailure: SyntaxError: Unerwarteter Bezeichner – DMH

+0

was Sie wollen, ist eine exklusive oder: (p und nicht q) ODER (q und nicht p). Sie können das mit Mongo mit '$ und', '$ oder' und '$ not' Anfrageoperatoren – VonD

Antwort

0

ich es geschafft, was ich von vond Kommentar möchten. Dies führte mich zu erstellen:

scope :with_training_complete, where(:$or => [ { :video_training_completed => true }, { :face_to_face_training_completed => true } ]) 
0

Sie sollten dafür ^ verwenden.

Dies wird erklären, was es tut:

irb(main):002:0* a 
=> 1 
irb(main):003:0> a ==1 
=> true 
irb(main):004:0> b=2; 
irb(main):005:0* (a==1) && (b==2) 
=> true 
irb(main):006:0> (a==1)^(b==2) 
=> false 
irb(main):007:0> (a==1)^(b==3) 
=> true 
irb(main):008:0> 
Verwandte Themen