Поиск ActiveRecord по DateTime не работает - PullRequest
1 голос
/ 10 февраля 2011

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

У меня есть таблица entries.При сохранении новой записи entries_controller добавляет время к столбцу date, которое записывается как дата и время.В методе new я объявляю новый DateTime следующим образом:

@entry.date = DateTime.new( params[:year].to_i, params[:month].to_i, params[:day].to_i )

Затем я включаю его в качестве скрытого поля с помощью formtastic:

<%= f.input :date, :as => :hidden %>

После сохранения записи вВ базе данных поле даты выглядит как 2011-02-10 00:00:00.Пока все работает, как и планировалось, но когда я пытаюсь получить эту запись путем запроса к полю date, я получаю nil.

Я пытался:

search_date = DateTime.new(2011,2,10)
Entry.find_by_date(search_date)
=> nil

Я даже пытался искать по строке, что не имеет смысла, поскольку это поле даты и времени.

search_time = '2010-02-10 00:00:00'
Entry.find_by_date(search_date)
=> nil

Что я здесь не так делаю?Почему я не могу получить запись по дате?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2011

Я только что протестировал это в Rails 3.0.4, mysql2 0.2.6 и

Entry.find_by_date(DateTime.new(2011,2,10))

.

Сказав это, почему вы используете столбец datetime для сохранения даты?Кроме того, что это просто плохая идея, вы можете столкнуться с некоторыми проблемами с часовыми поясами, основанными на ваших настройках rails и sql.Некоторое автоматическое преобразование часового пояса может объяснить поведение, которое вы наблюдаете, но это только предположение.Пожалуйста, проверьте журналы сервера разработки, чтобы увидеть, действительно ли rails генерирует запрос, который вы хотите сгенерировать.

0 голосов
/ 10 февраля 2011

Будет ли это работать для вас?

Entry.where("date = #{search_date}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...