轨的ActiveRecord查找日期/搜索(Rails ActiveRecord Find / Se

2019-07-03 13:29发布

我试图找到“created_at”最新记录 - 数据库列类型是“日期时间”,我现在用的是UI的DatePicker jQuery的距离

我的网址是这样的: “本地主机:3000 / users_supported selected_date = 2012-10-31”

到目前为止,我在做什么好:)我在控制器查询如下所示:

@support_histories = current_agent.support_histories.where(:created_at => Date.parse(params[:selected_date]))

如何正确提取由只能从“日期时间”“日期”数据库列记录

我试图在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')

Answer 1:

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)

时区可能是你需要寻找到一个问题,但如果你所有的时间都在同一个时区这应该工作。



Answer 2:

我创建像下面模型的方法解决了这个问题,我说,我的模型是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

这给了我,由用户选择的日期匹配准确的结果。



Answer 3:

一个简单的解决方案,我有时用的是铸造日期(时间)字段作为文本的数据库,而不是解析字符串转换日期应用端。 对于你的情况,这将是:

where('CAST(created_at AS text) LIKE ?', params[:selected_date])

可能不是数据库的最有效的,但节省了大量皮塔在应用程序端。



文章来源: Rails ActiveRecord Find / Search by Date