Rails ActiveRecord Поиск / Поиск по дате

Я пытаюсь найти записи посоздан в' date - тип столбца базы данных 'Дата и время» и я использую пользовательский интерфейс DatePicker из jQuery

мой URL выглядит так: "локальный: 3000 / users_supported selected_date = 2012-10-31"

Пока у меня все хорошо :) и мой запрос в контроллере выглядит так:

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

Как правильно извлечь записи по 'Дата' только изДата и время» столбец дБ

Я попытался сделать это в Rails Console, но не повезло:

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'))

У меня есть записи, если мне нравится упомянуто ниже, но этомне это не полезно, так как я пытаюсь найти записьДата' не поDateTime»

sh = SupportHistory.where(:created_at => '2012-10-31 19:49:57')

Ответы на вопрос(3)

Решение Вопроса
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)

Часовые пояса могут быть проблемой, которую вы должны изучить, но это должно работать, если все ваше время находится в одном часовом поясе.

 Jason Noble04 нояб. 2012 г., 16:40
Раздел 2.2.2 изguides.rubyonrails.org/active_record_querying.html похоже на ответ, который я дал. Вы могли бы сделать что-то творческое, какselect("date(created_at) as ordered_date).where(:ordered_date => ____) но мне нравитсяbeginning_of_day..end_of_day решение.
 Syed04 нояб. 2012 г., 05:46
У меня нет слов, чтобы поблагодарить вас, но я должен сказать, что Я ТЕБЯ ЛЮБЛЮ;) - Я новичок в кодировании и пытался делать это весь день :) Я все еще хотел бы знать - есть ли способ запросить БД без учета времени?
 Constant Meiring02 дек. 2017 г., 17:48
Это такое элегантное решение Railsy. :)

Простое решение, которое я иногда использую, состоит в том, чтобы преобразовать поле даты (времени) в текст в базе данных, а не анализировать строку в дату на стороне приложения. Для вашего случая это будет:

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

Может быть не самым эффективным в базе данных, но экономит много пита на стороне приложения.

Я решил эту проблему, создав метод в модели, как показано ниже. Скажем, моя модель - 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

Это дает мне точные результаты, которые соответствуют выбранной пользователем дате.

 David Escobar02 апр. 2016 г., 01:19
Это не очень хороший способ сделать это, потому чтоTicket.all» получает все билеты в таблице и расширяет их в массив в памяти. Плохо для потребления памяти и производительности. Также вместо того, чтобы делатькарта" с последующим "компактный» (скорее всего, дважды просматривая всю коллекцию билетов!), просто используйте "Выбрать" метод, который фильтрует коллекцию за один проход. Но в конце концов, Джейсон НоблОтвет выше - правильный способ сделать это, так какгде" не расширяй все в памяти как надовсе" делает.

Ваш ответ на вопрос