2015-05-16 3 views
0

У меня есть модель ExchangeRates, у которой есть поле time типа DateTime. Я хочу найти курс обмена с того же дня. Я пробовал следующим образом:Модель Rails - проверьте, есть ли объект DateTime в течение дня

per = ExchangeRates.find_by(time: er.time.beginning_of_day..er.time.end_of_day) 

Однако это не возвращает объект ExchangeRate с того же дня. Как я могу исправить это?

+0

Я часто нахожу 'to_sql' полезным в таких случаях - он покажет вам SQL, который выполняет ActiveRecord. 'ExchangeRates.find_by (время: er.time.beginning_of_day..er.time.end_of_day) .to_sql' – eebbesen

ответ

0

Вы можете быть лучше обслужены пытаться это с where следующим образом:

per = ExchangeRates.where("time > ? AND time < ?", er.time.beginning_of_day, er.time.end_of_day) 

Это переведет ваш запрос непосредственно в SQL. Хотя это гораздо меньше ActiveRecord «ish», чем я предпочитаю, я не нашел хорошего способа сделать что-то простое, что ищет диапазоны.

Если вы хотите что-то еще более чистым, вы можете подумать о том, чтобы обезопасить AR для поддержки операции range, которая эффективно делает что-то подобное под капотом с переданным в хэш.

0

Это должно работать для вас

per = ExchangeRates.where(time: er.time.beginning_of_day..er.time.end_of_day).first

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

Допустим, если у меня есть столбец created_at, я также добавляю столбец created_on. У одного есть тип даты, тип письма - дата.

Смежные вопросы