在Rails链中或类似的地方缩小结果

时间:2013-12-21 16:35:20

标签: ruby-on-rails ruby-on-rails-3 postgresql ruby-on-rails-4 squeel

如何缩小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>

1 个答案:

答案 0 :(得分:0)

我现在正在做

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

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