0

如何缩小 Rails 中表格的结果范围?

我正在使用 Rails 4.0.2 和 PostgreSQL 并且可以

users = User.where(:flag1).where(:flag2 => nil)

但不是

users = User.where(:flag1).where(:flag2 => nil).where(:flag3 => nil)

要得到

#<ActiveRecord::Relation []>

我错过了什么吗?

我已经尝试过使用 Squeel,并且可以类似地做

users = User.where{(flag1) & (flag2 == nil)}

但不是

users = User.where{(flag1) & (flag2 == nil) & (flag3 == nil)}

产生

!! #<TypeError: Cannot visit Squeel::Nodes::Predicate>

关于如何使用和/或不使用 Squeel 的任何想法?谢谢!

更新

正常查询的问题是由 flag2 和 flag3 值可以是 nil 或 false 引起的。我试图在 Squeel 中考虑到这一点。

我可以

User.where{(flag1) & ((flag2.eq nil) | (flag2.eq false))}

但不是

User.where{(flag1) & ((flag2.eq nil) | (flag2.eq false)) & ((flag3.eq nil) | (flag3.eq false))}

返回

!! #<TypeError: Cannot visit Squeel::Nodes::Or>
4

1 回答 1

0

我现在在做

User.where{(flag1)}.where{((flag2.eq nil) | (flag2.eq false))}.where{((flag3.eq nil) | (flag3.eq false))}

这似乎在 Rails 控制台中有效。

于 2013-12-21T18:25:36.927 回答