如何在Rails查询的WHERE子句中编写DateTime.current?

时间:2014-07-07 23:38:39

标签: ruby-on-rails datetime activerecord

在我的一个模型中,我有一个名为 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。

1 个答案:

答案 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 |

+ ---------------- +

`