【发布时间】:2013-12-21 16:35:20
【问题描述】:
如何缩小 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>
【问题讨论】:
-
您确定要共享您尝试过的实际 Rails 代码吗?
where不需要阻止,但这就是您所显示的(即where {...}。 -
对此表示感谢和抱歉。更新了帖子。应该只用于 squeel。
-
你能分享一下你在 Rails 案例中得到的输出,但它没有产生你想要的东西吗?
-
我想我现在可以正常工作了。不过谢谢!
标签: ruby-on-rails ruby-on-rails-3 postgresql ruby-on-rails-4 squeel