我有一个ScheduleTime
ActiveRecord对象,time
属于column_type :time
。
我试图检索与当前小时和分钟匹配的对象
ScheduleTime.all.select do |s|
now = Time.now
s.time.hour == now.hour && s.time.min == now.min
end
可以在where
子句中使用SQL吗?
编辑:
我已经接近了,我可以按小时查询:
ScheduleTime.where("date_part('hour', time) = ?", Time.now.hour)
EDIT#2 :
这是我目前的实施......
class ScheduleTime < ActiveRecord::Base
belongs_to :schedule
validates_presence_of :schedule_id, :time
scope :by_hour, ->(hour) { where("date_part('hour', time) = ?", hour) }
scope :by_minute, ->(minute) {where("date_part('minute', time) = ?", minute) }
scope :by_time, ->(time) { by_hour(time.hour).by_minute(time.min) }
scope :now, -> { by_time(Time.now) }
end
答案 0 :(得分:1)
最终版本看起来不错。只需确保使用Time.zone.now
代替Time.now
,因为前者不会考虑您应用的配置时区。