【问题标题】:Rails/ActiveRecord: Get a record made *AFTER* a particular dateRails / ActiveRecord:获取*之后*特定日期的记录
【发布时间】:2010-10-20 01:09:28
【问题描述】:

所以目前我遇到了一个问题,我通过客户端的 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 并尝试使用它。现在我可以正确输入日期(它是一个字符串),但同时我无法让上面的查询工作。

我只需要确保我只显示未过期的记录。在网上搜索了两天并且没有有效的答案后,我决定在这里问。在此先感谢:)

【问题讨论】:

    标签: ruby-on-rails sqlite postgresql activerecord


    【解决方案1】:

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

    【讨论】:

    • 您应该将问题标记为已回答。您可以选择自己的答案作为答案。
    【解决方案2】:

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

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

    这应该会在未来获得所有交易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      相关资源
      最近更新 更多