我需要创建一个范围来检查模型上的两个字段是否为真,但是它不应该包含两者都为真的记录,只包括其中任何一个的记录。我希望这是有道理的。
我正在使用Rails 3.2和Mongo 3.任何人都可以推荐一种方法来实现这一目标吗?
我的第一次尝试是
scope :with_training_complete, where(
:volunteer_training_completed => true
).or(:face_to_face_training_attended => true)
但是这只会带回两个都是真的记录。
任何帮助都会非常感激。
答案 0 :(得分: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>
答案 1 :(得分:0)
我设法从VonD的评论中得到了我想要的东西。这促使我创建:
scope :with_training_complete, where( :$or => [ { :video_training_completed => true }, { :face_to_face_training_completed => true } ])