Rails作用域过滤日期时间参数

时间:2015-04-03 13:10:46

标签: ruby-on-rails datetime get params

我构建了一个rails应用程序作为移动应用程序的API。 我想根据GET参数获取记录的子集。

我的模型是这样的:

# == Schema Information
#
# Table name: inspections
#
#  id         :integer          not null, primary key
#  date       :date
#  station_id :integer
#  created_at :datetime         not null
#  updated_at :datetime         not null
#
class Inspection < ActiveRecord::Base
  include Filterable

  belongs_to :station
  has_many :state_checks

  scope :station_id, -> (station_id) { where station_id: station_id }
  scope :date, -> (date) { where date: DateTime.parse(date) }
end

然后我写了一个问题:

module Filterable
  extend ActiveSupport::Concern

  module ClassMethods
    def filter(filtering_params)
      results = self.where(nil)
      filtering_params.each do |key, value|
         results = results.public_send(key, value) if value.present?
      end
      results
    end
  end
end

现在,当我做GET'/inspections.json?station_id=1&date=2015-04-03T10:44:00.000Z' 范围:station_id有效,但:日期范围不起作用。 关于这个的任何线索?

由于

1 个答案:

答案 0 :(得分:0)

看起来日期正在为您提供完整的时间戳。这几乎就是您的查询所做的事情:

date_1 = DateTime.parse('2015-04-03T10:01:00.000Z')
-> 'Fri, 03 Apr 2015 10:01:00 +0000'
date_2 = DateTime.parse('2015-04-03T10:11:00.000Z')
-> 'Fri, 03 Apr 2015 10:11:00 +0000'
date_1 == date_2
-> false

您的查询正在检查第二秒的相等性。看起来你需要更像这样的东西:ActiveRecord Find By Year, Day or Month on a Date field