【问题标题】:Ruby on Rails Select with date rangeRuby on Rails 选择日期范围
【发布时间】:2015-04-12 16:28:25
【问题描述】:

我正在尝试使以下句子起作用,

User.all.select{ |user| user.created_at === DateTime.yesterday..DateTime.today }

User.all.select{ |user| user.created_at == DateTime.yesterday..DateTime.today }

User.all.select{ |user| user.created_at => DateTime.yesterday..DateTime.today }

这不起作用并提示bad value for range 错误。

我知道有更有效的方法来完成此任务并获得相同的结果,但我对如何获得具有日期范围的选择工作感兴趣

【问题讨论】:

  • 请注意,调用all.select 会从数据库中检索所有用户,然后在内存中从中选择。很难想象这是个好主意。
  • @TimScott 出色的观察结果,但如上所述,这仅用于解释目的,谢谢

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


【解决方案1】:
range = (DateTime.yesterday..DateTime.now)
User.all.select { |user| range.cover?(user.created_at) }

【讨论】:

    【解决方案2】:

    由于您使用的是 Rails 3,因此您可以这样做:

    User.find(:all, :conditions => {:created_at => DateTime.yesterday.. DateTime.today})
    

    但请注意,这已被弃用:

    User.where(:created_at => DateTime.yesterday..DateTime.today)
    

    【讨论】:

    • 非常感谢,但正如我所说,只是为了“好玩”,想知道如何使用 select 方法。干杯!
    • 很公平,但如果这是你认为“有趣”的事情,你真的应该多出去走走。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    相关资源
    最近更新 更多