Почему SQL, сгенерированный ActiveRecord, содержит столбец «Дата для времени»? - PullRequest
3 голосов
/ 20 июня 2009

Когда я создаю столбец времени SQL, я получаю чистое время, т.е. без даты. Но когда я использую класс Ruby Time, я тоже получаю свидание. Проблема в том, что когда 'find' сгенерированный SQL содержит дату, я, кажется, получаю странные результаты.

Стол

start_date: time
end_time: time
day_of_week: string

ActiveRecord

def self.now_playing
    self.find(:first, :conditions => ['day_of_week = ? AND end_time > ? AND start_time < ?',  Time.now.strftime('%A'), Time.now, Time.now])
end

SQL

SELECT * FROM `schedules` WHERE (day_of_week = 'Saturday' AND end_time > '2009-06-20 10:19:59' AND start_time < '2009-06-20 10:19:59') LIMIT 1

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

1 Ответ

3 голосов
/ 17 декабря 2010

Время в Ruby больше похоже на метку времени ... всегда есть дата. ActiveSupport имеет встроенные преобразования для этого, поэтому, если дата искажает ваши результаты, вы можете использовать #to_s (: format), чтобы получить нужные результаты. По умолчанию есть опция: time, но она возвращает только часы / минуты (% H:% M), если вам нужны секунды, вам нужно будет добавить другой формат ...

Создайте инициализатор с именем time_formats.rb или что-то еще и добавьте:

Рельсы 2-х

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!({
  :time_long => "%H:%M:%S"
})

Рельсы 3

Time::DATE_FORMATS.merge!(
  :time_long => "%H:%M:%S"
)

Тогда в вашем искателе просто сделайте так:

def self.now_playing
  time = Time.now
  self.find(:first, :conditions => ['day_of_week = ? AND end_time > ? AND start_time < ?',  time.strftime('%A'), time.to_s(:time_long), time.to_s(:time_long)])
end

Более подробную информацию можно найти здесь: http://jasonseifer.com/2010/03/10/rails-date-formats

Или здесь: http://brian.rarevisions.net/extending-date-formats-in-rails-3

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