【问题标题】:Rails 3: Finding records with datetime 3 days from todayRails 3:从今天开始查找日期时间为 3 天的记录
【发布时间】:2012-11-30 10:18:20
【问题描述】:

我有以下范围:

def coming_up_on_renewal(product_name = "product_name")
  where('billing_start_date = NOW() + INTERVAL 3 day AND status = ? AND product_name = ? AND auth_net_subscription_id IS NOT NULL', :active, "#{product_name}")
end

并且我已将数据库中的一条记录操作为未来 3 天,但是当我运行此范围时,会返回一个空数组。

我基本上是在尝试检索billing_start_date 距离当天 3 天的记录。

【问题讨论】:

    标签: mysql ruby-on-rails-3 activerecord


    【解决方案1】:

    试试这个。

    def coming_up_on_renewal(product_name)
      where(:status => :active, :product_name => product_name)
      .where(:billing_start_date => 
       (3.days.from_now.beginning_of_day)..(3.days.from_now.end_of_day))
      .where('auth_net_subscription_id IS NOT NULL')
    end
    

    有关您的其他“IS NOT NULL”条件,请参阅this answer

    【讨论】:

    • 运行您的 activerecord 语句时出现错误:syntax error, unexpected ',', expecting tASSOC ...name, 'billing_start_date = ?', 3.days.from_now)
    • 感谢您的帮助!我能够通过以下方式获得它:where(:status => :active, :product_name => product_name, :billing_start_date => (Time.now.midnight + 3.day)..(Time.now.end_of_day + 3.day)).where('auth_net_subscription_id IS NOT NULL')
    • 我已经编辑了我的答案,但我对 billing_start_date 部分不满意。使用3.days.from_now,它正在寻找具有该时间戳的记录,直到第二个。您可能会寻找更多的日期范围。
    • 我更改了范围以匹配您的最新编辑...完美!
    • 现在包括您的反馈。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多