RoR将时间戳符号与控制器中的Time.now日期进行比较

时间:2013-12-19 20:12:16

标签: ruby-on-rails ruby

我正试图在我的控制器中做这样的事情:

@inventory_items = @store.inventory_items.where(:updated_at < Time.now - 1.minute)

我一直收到comparison of Symbol with Time failed错误。

我试图在:updated_at上调用to_datetime和to_date,但是那些只能用于字符串或整数?

如何将:updated_at转换为正确的日期格式以与Time.now - 1.minute进行比较?

提前致谢!

2 个答案:

答案 0 :(得分:3)

嗯,有一些方法可以做到。

它不起作用的原因是因为符号只是指向列的指针,而不是列本身。

所以,要么你做

@inventory_items = @store.inventory_items.where(["updated_at < ?", Time.now - 1.minute])

或作为替代

@inventory_items = @store.inventory_items.where(["updated_at < :one_minute_ago", {one_minute_ago: Time.now - 1.minute]})

或者,你可以做到

@inventory_items = @store.inventory_items.where.not(:updated_at => Time.now - 1.minute..Time.now)

答案 1 :(得分:2)

我不认为使用哈希样式可以使用小于或大于检查。请尝试以下方法:

@inventory_items = @store.inventory_items.where('inventory_items.updated_at < ?', Time.now - 1.minute)

就“正确的日期格式”而言,您不必在此担心它们。默认情况下,所有数据库日期都转换为UTC。