在我的模型消息数据库中,我有一个created_at属性用于存储对象的首次创建时间,还有一个status_updated_at属性用于存储对象的状态更新的时间。这两个属性均为ActiveSupport::TimeWithZone
我正在尝试在created_at的3分钟内找到status_updated_at在数据库中的所有对象。
我已经尝试过Message.where("status_updated_at<=(created_at+180.seconds)")
和Message.where("(status_udpated_at-created_at)<=180.seconds")
。
他们俩都给了我#<Message::ActiveRecord_Relation:0x3843d7c>
。但是,当我尝试对它们进行计数时,例如Message.where("status_updated_at<=(created_at+180.seconds)").count
,出现以下错误:
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "seconds"
LINE 1: ...essages" WHERE ((status_udpated_at-created_at)<=180.seconds)
^
: SELECT COUNT(*) FROM "messages" WHERE ((status_udpated_at-created_at)<=180.seconds)
from /var/lib/gems/2.3.0/gems/activerecord-5.1.2/lib/active_record/connection_adapters/postgresql_adapter.rb:620:in `async_exec'
我应该如何在created_at的3分钟(180秒)内获取具有status_updated_at的邮件计数?
谢谢。
答案 0 :(得分:2)
两个timestamp
s in PostgreSQL is an interval
值和interval
之间的区别有一些方便的text representations,因此您可以这样说:
Message.where('status_updated_at - created_at <= ?', '3 minutes').count
Message.where('status_updated_at - created_at <= ?', '180 seconds').count