2016-04-11 16 views
0

我需要創建一個範圍,檢查模型上的兩個字段是否爲真,但它不應該包含兩個都爲真的記錄,他們是。我希望這是有道理的。基於兩個字段爲true的條件範圍,但不是兩個

我正在使用Rails 3.2和Mongo 3.可以推薦一種方法來實現這個嗎?

我第一次嘗試已經

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

但帶回只記錄其中兩個是真實的。

任何幫助將不勝感激。

+0

'範圍:with_training_complete,其中( 「volunteer_training_completed = true或face_to_face_training_attended =真」)' - 你可以試試這個? – dp7

+0

@dkp我得到以下錯誤:'Mongo :: OperationFailure:SyntaxError:Unexpected identifier' – DMH

+0

你想要的是一個排他性的:(p AND NOT q)或(q AND NOT p)。你可以使用'$和','$或'和$ $''查詢運算符 – VonD

回答

0

我設法讓我從VonD的評論需要。這使我創造:

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

您應該爲此使用^

這將它做了什麼:

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>