Rails / ActiveRecord:获取*特定日期*之后的记录

时间:2010-10-20 01:09:29

标签: ruby-on-rails sqlite postgresql activerecord

所以目前我遇到的问题是我通过客户端的API从xml文件填充数据库。每条记录都有一个到期日期,格式如下:

<offer_ends_at>2010-10-20T07:59:59-04:00</offer_ends_at>

现在,我需要运行一个查询,我只能获得将来有效的记录。我目前的代码是:

@deals = Deal.where(["city = :city AND status = 'live' AND DATETIME(date_expires) >= DATETIME(:time)", { :city => @city.id, :time => Time.now }])

当我正在录制时,我使用了这个:

@deal.date_expires = DateTime.parse((entry/"offer_ends_at").inner_html)

这就是我获取日期时间并格式化的方式。

这是我在的地方:

  1. 我似乎无法直接进入数据库,没有任何问题。如果我使用上面的代码并将架构设置为列类型为:datetime或:time,则它给出了2000-01-01的日期并且没有有效时间。它实际上没有设置实际日期,就像它给出的那样。
  2. 我将列类型转换为:string并尝试使用它。现在我可以正确输入日期(它是一个字符串),但同时,我无法让上面的查询工作。
  3. 我只需要确保我只显示未过期的记录。经过两天的淘网和没有工作的答案,我决定在这里问。在此先感谢:)

2 个答案:

答案 0 :(得分:1)

答案是我的代码实际上并不是很糟糕。出现的问题是我没有正确地将输入日期格式化为运行查询时可以理解的内容。只需将我的查询从Time.now更改为Time.now.parse即可。

答案 1 :(得分:0)

ActiveRecord构建在Arel库之上,因此我们可以使用它来进行更明确的查询。

t = Deal.arel_table @deals = Deal.where(city: @city.id, t[:time].gt(1.second.ago))

这将在未来获得所有优惠。

相关问题