基于两个字段为真但不同时为

时间:2016-04-11 13:57:40

标签: ruby-on-rails

我需要创建一个范围来检查模型上的两个字段是否为真,但是它不应该包含两者都为真的记录,只包括其中任何一个的记录。我希望这是有道理的。

我正在使用Rails 3.2和Mongo 3.任何人都可以推荐一种方法来实现这一目标吗?

我的第一次尝试是

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

但是这只会带回两个都是真的记录。

任何帮助都会非常感激。

2 个答案:

答案 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 } ])