在我的一个模型中,我有一个名为 started 的列,它是一个DateTime,我希望能够编写一个类方法来返回DateTime.current
之间差异的记录并且已启动列大于N秒。
这是我到目前为止所做的:
def self.elapsed_started_bigger_than(sec = 10)
where('started IS NOT NULL').
where( ((DateTime.current - started) * 24 * 60 * 60).to_i > sec) # This is what I don't know how to write
end
理想情况下,这应该是数据库引擎无关的,即使现在我正在使用PostgreSQL。
答案 0 :(得分:0)
你应该使用范围并像这样写
scope :started, where('started IS NOT NULL')
scope :elapsed_since, Proc.new {|sec| where("NOW() - started > ?", sec.seconds)}
像这样使用
model.started.elapsed_since(10)
修改强>
Mysql的
` MySQL的>选择NOW() - 10;
+ ----------- ------------ +
|现在() - 10 |
+ ----------- ------------ +
| 20140707200211.000000 |
+ ----------- ------------ +
的MySQL>选择NOW() - " 10&#34 ;;
+ ---------------- +
|现在() - " 10" |
+ ---------------- +
| 20140707200223 |
+ ---------------- +
`