Rails4 - 按时间小时和/或时间分钟查询?

时间:2014-09-21 18:59:54

标签: ruby-on-rails ruby-on-rails-4

我有一个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

1 个答案:

答案 0 :(得分:1)

最终版本看起来不错。只需确保使用Time.zone.now代替Time.now,因为前者不会考虑您应用的配置时区。