Мне нужно запросить комментарии, сделанные за один день. Поле является частью стандартных временных меток, является created_at
. Выбранная дата исходит от date_select
.
Как я могу использовать ActiveRecord
это сделать?
Мне нужно что-то вроде:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
1..1000000000000
мне неясно, что вы подразумеваете под «использованием диапазона самостоятельно»scope :between, -> (a, b) { where(created_at: a..b) }
Я бы лично создал область, чтобы сделать ее более читабельной и многократно используемой:
В вашем Comment.rb вы можете определить область действия:
Затем запрос создан между:
Надеюсь, поможет.
источник
#between?
принял диапазон.В Rails 5.1 появился новый вспомогательный метод date
all_day
, см. Https://github.com/rails/rails/pull/24930.Если вы используете Rails 5.1, запрос будет выглядеть так:
источник
require 'active_record'
и все готово!Этот код должен работать для вас:
Для получения дополнительной информации взгляните на расчет времени
Примечание. Этот код устарел . Используйте код из ответа, если вы используете Rails 3.1 / 3.2
источник
date()
функцию уровня db ; это потенциально более независимый от БД.Я запустил этот код, чтобы проверить, сработал ли проверенный ответ, и попытался поменять местами даты, чтобы получить правильный ответ. Это сработало
Если вы думаете, что результат должен был быть 36, подумайте, сэр, сколько дней 3 дня для 3 человек?
источник
источник
Я использовал 3 точки вместо 2. Три точки дают вам диапазон, который открыт в начале и закрыт в конце, поэтому, если вы сделаете 2 запроса для последующих диапазонов, вы не сможете вернуть ту же строку в обе.
И, да, всегда приятно использовать прицел!
источник
Если вы хотите получить только один день, это будет проще:
источник
Есть несколько способов. Вы можете использовать этот метод:
Или это:
источник
На это, я считаю, должно быть поведение активной записи по умолчанию. Запрашивать даты сложно, особенно когда задействованы часовые пояса.
Во всяком случае, я использую:
источник
Вы можете использовать ниже гем, чтобы найти записи между датами,
Этот драгоценный камень довольно прост в использовании и более понятен. Звездой я использую этот драгоценный камень и API, более понятный и хорошо объясненный документацией.
Здесь вы также можете пройти наше поле
Post.by_month("January", field: :updated_at)
Пожалуйста, посмотрите документацию и попробуйте.
источник