我试图通过'created_at'日期查找记录 - 数据库列类型是'datetime'和 我正在使用jQuery的UI DatePicker
我的网址如下:“localhost:3000 / users_supported?selected_date = 2012-10-31”
到目前为止我做得很好:)我在控制器中的查询看起来像这样:
@support_histories = current_agent.support_histories.where(:created_at => Date.parse(params[:selected_date]))
如何仅从'datetime'db列
中按'日期'正确提取记录我尝试在Rails控制台中执行此操作,但没有运气:
sh = SupportHistory.where(:created_at => DateTime.parse('2012-10-31'))
sh = SupportHistory.where(:created_at => Date.parse('2012-10-31'))
sh = SupportHistory.where(:created_at => DateTime.strptime('2012-10-31', '%Y-%m-%d'))
我有记录,如果我喜欢下面提到的,但这对我没用,因为我试图通过'日期'而不是'日期时间'找到记录
sh = SupportHistory.where(:created_at => '2012-10-31 19:49:57')
答案 0 :(得分:23)
selected_date = Date.parse(params[:selected_date])
# This will look for records on the given date between 00:00:00 and 23:59:59
sh = SupportHistory.where(
:created_at => selected_date.beginning_of_day..selected_date.end_of_day)
时区可能是您需要关注的问题,但如果所有时间都在同一时区,这应该有效。
答案 1 :(得分:0)
我通过在下面的模型中创建方法解决了这个问题, 比如,我的模型是ticket.rb
def created_date
self.created_at.to_date
end
然后我这样查询,
selected_date = Date.parse(params[:date])
Ticket.all.map{|t| t if t.created_date == selected_date}.compact
这为我提供了与用户所选日期相匹配的准确结果。
答案 2 :(得分:0)
我有时使用的一个简单解决方案是将日期(时间)字段作为文本转换为数据库,而不是将字符串解析为应用程序端的日期。对于您的情况:
where('CAST(created_at AS text) LIKE ?', params[:selected_date])
可能不是数据库中最有效的,但在应用程序端节省了大量的皮塔饼。