红宝石的时间格式

时间:2018-04-18 10:27:17

标签: ruby-on-rails ruby activerecord

我在Rails / ActiveRecord中有一个关于时间格式的快速问题。

我想拥有自特定日期以来的所有数据。我已经完成了最后7天或者最后一个月,但是我希望自2017年5月开始使用它。

以下是我提出的建议:

 %td= User.where('last_sign_in_at >= ?', 1.month.ago).sum(:sign_in_count) # As exemple
 %td= User.where('last_sign_in_at >= ?', 2017-05-01).sum(:sign_in_count) # Here's what I'm looking for.

但这是我得到的错误No operator matches the given name and argument type(s). You might need to add explicit type casts.

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你可以在sql中传递一个表示日期的字符串,如下所示:

...where("last_sign_in_at >= '2017-05-01'")...

注意日期周围的';它们适用于SQL,而不适用于Ruby,因此ruby字符串位于"之间,以避免将它们转义为\'

如果您有日期对象,可以将其转换为如下字符串:

some_date = Date.today-360 # You can subtract days from Date objects in Ruby
...where('last_sign_in_at >= ?', some_date.strftime('%Y-%m-%d'))
# strftime = string-format-time (or something like that)

否则,如果您已经有一个表示日期的字符串,您可以直接使用它,并且很可能您的数据库将知道如何将字符串解释为日期。请记住添加'

注意:有可能做" last_sign_in_at> ='>'"然后在没有'的情况下传递字符串,但是如果有效则你必须自己尝试。