2016-04-11 14 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>