【问题标题】:Where chains or similar in Rails to narrow results在 Rails 中使用链或类似的东西来缩小结果
【发布时间】: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


【解决方案1】:

我正在做

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多