【问题标题】:Avoid searching database twice in multiple conditions where clause避免在多个条件where子句中两次搜索数据库
【发布时间】:2013-01-21 21:11:12
【问题描述】:

不知道有没有Rails的魔法可以避免在以下情况下两次搜索数据库:

背景:我正在搜索来自用户的订单,这些订单要么是 PENDING 要么 SENT 并且今天到期。

这是伪代码:

order_array = Order.where(:filled => pending) || Order.where(:fileld => done, :due => today)

现在的问题是这会搜索数据库两次。我想在一次搜索中做到这一点,并希望得到有关 RoR 将如何做到这一点的指针。

【问题讨论】:

    标签: ruby-on-rails arrays where multiple-conditions


    【解决方案1】:

    我想这就是你要找的东西:

    order_array = Order.where("filled = 'PENDING' OR (filled = 'SENT' AND due BETWEEN ? AND ?)", Time.zone.now.beginning_of_day, Time.zone.now.end_of_day)
    

    【讨论】:

    • 酷!我想知道是否有一个 Rails“快捷方式”来避免输入 SQL 文本,以供我自己启迪。但这是一个非常有价值的解释,谢谢。
    • 不客气@Laurent ;) 不要忘记接受答案
    【解决方案2】:

    尝试如下链条件 -

    Customer.where(:reseller_id => :map_reseller_id).where(:is_deleted_by_reseller => false)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 2019-11-16
      相关资源
      最近更新 更多