我构建了一个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有效,但:日期范围不起作用。 关于这个的任何线索?
由于
答案 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