我在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.
有什么建议吗?
答案 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> ='>'"然后在没有'
的情况下传递字符串,但是如果有效则你必须自己尝试。