Activerecord Rails 3.2中的日期比较
舞台: 我有这个模型:Activerecord Rails 3.2中的日期比较,activerecord,ruby-on-rails-3.2,active-record-query,Activerecord,Ruby On Rails 3.2,Active Record Query,舞台: 我有这个模型: Promo(id: integer, start_date: datetime, end_date: datetime) 我想知道目前哪些促销活动。 可能我们的查询应该是这样的: SELECT * FROM promos WHERE now BETWEEN start_date AND end_date; 问题: 我应该如何用Ruby制作? 哪种方法正确 谢谢。是的,您可以使用比较运算符来比较日期,例如: irb(main):018:0> yesterday =
Promo(id: integer, start_date: datetime, end_date: datetime)
我想知道目前哪些促销活动。
可能我们的查询应该是这样的:
SELECT * FROM promos WHERE now BETWEEN start_date AND end_date;
问题:
我应该如何用Ruby制作?
哪种方法正确
谢谢。是的,您可以使用比较运算符来比较日期,例如:
irb(main):018:0> yesterday = Date.new(2009,6,13)
=> #<Date: 4909991/2,0,2299161>
irb(main):019:0> Date.today > yesterday
=> true
irb(main):018:0>Date=Date.new(2009,6,13)
=> #
irb(主要):019:0>日期.今天>昨天
=>正确
但是你是在试着比较一个日期和一个日期时间吗
如果是这样的话,您需要将datetime转换为日期,然后进行比较
或
Date.parse('2010-11-01')
如果已通过“2010-11-01”,则将返回true
我希望这能有所帮助。还没有测试过这一点,但请尝试以下方法:
currentTime = Time.now()
Promo.find(
:all,
:conditions => ['start_date < ? AND end_date > ?', currentTime, currentTime]
)
currentTime=Time.now()
宣传片(
:全部,
:条件=>[“开始日期<和结束日期>”,当前时间,当前时间]
)
如果
Time
类不起作用,您可能需要使用Date
类。如果检索日期/时间,它将转换为DateTime对象。
相反,将DateTime对象传递给where子句(对于Rails 3.x),它将正确地构建where子句
传递给where子句的字符串将传递给SQLWHERE子句。如果传递一个数组,
第二个和以后的元素将替换为第一个元素中的“?”字符
因此,对于您的情况:
Promo.where(["? between start_date and end_date", DateTime.now])
工作。我在我的Rails模型(位置)上进行了验证,该模型碰巧有开始日期和结束日期,并且工作正常:
[1] pry(main)> Position.where(["? between start_date and end_date", DateTime.now]).count
=> 2914
它位于PostgreSQL的Rails 3.2.8上。任何人回答对你有帮助的问题,然后接受这个答案
[1] pry(main)> Position.where(["? between start_date and end_date", DateTime.now]).count
=> 2914