Как сравнить часть даты поля datetime в рельсах 3.1? - PullRequest
3 голосов
/ 06 января 2012

Наше приложение имеет модель lease_booking с полем lease_date, который представляет собой время данных (мы используем sqlite для разработки и mysql для производства). Приложению необходимо найти все lease_booking на указанную дату. Код похож на:

LeaseBooking.where("lease_date == ?", '2012-1-5')

Проблема в том, что мы не можем найти арендную плату за 2012/1/5, потому что дата аренды - это формат даты и времени. Как приложение может сравнить часть даты только для поля времени данных в рельсах 3.1?

спасибо.

Ответы [ 2 ]

5 голосов
/ 06 января 2012

Боюсь, вам придется сделать:

LeaseBooking.where("date(lease_date) = ?", '2012-1-5')

(только с одним знаком =)

Возможно, есть лучший ответ, потому что назовите дату"функция не очень хороша для ActiveRecord!Как говорит Джейсон Льюис в комментариях, это зависит от БД.

3 голосов
/ 06 января 2012

Альтернативно, попробуйте это:

scope :booking_date, lamda {|d| where('lease_date > ?', Date.parse(d).to_time).where('lease_date < ?', (Date.parse(d) +1).to_time)}

И просто позвоните

LeaseBooking.booking_date('2012-01-05')

Цепочка where ужасна, но можете ли вы использовать несколько ? заполнителейили именованные переменные, чтобы сделать это одним оператором, сильно зависят от DB.Тем не менее, ARel хорошо умеет превращать даже уродливые цепочки запросов в эффективный SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...