(Моя проблема почти такая же, как , описанная в этом вопросе , только этот ответ не работает в моем случае.)
Я использую jQuery UI Datepickerв приложении Rails с базой данных Postgres. Реализация по умолчанию использует формат даты мм/дд/ггдля отображения выбранной даты, что мне и нужно. Однако после того, как я сохраню запись в базе данных, месяц и день меняются местами — тогда они отображаются как гг-дд-мм. Поэтому выбор 11.03.2012 пытается сохранить как 3 ноября вместо 11 марта, а дата вроде 31.03.2012 вообще не сохраняется, потому что не существует.
Пока что я использовал 3 разных способа, пытаясь исправить это:
1) Первая попытка состояла в том, чтобы переформатировать текстовое поле, чтобы дисплей выглядел так, как я хотел:
<%= f.text_field :foo, :value => (@model.foo.blank? ? '' : @model.foo.strftime('%m/%d/%Y')), class: "datepicker" %>
31.03.2012 отображалось правильно. изначально, но все равно переворачивается при сохранении.
2) Затем я попытался изменить способ хранения дат по умолчанию, думая, что это решит проблему. Как описано в ответе на этот вопрос, я добавил в config/locales/en.ymlследующее:
# config/locales/en.yml
en:
date:
formats:
default: "%m/%d/%Y"
Это не имело никакого значения. Затем я нашел этот вопроси попытался создать config/initializers/date_formats.rbсо следующими строками:
Date::DATE_FORMATS[:default]="%m/%d/%Y"
Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"
То же, что и выше, без разницы.
3) Поиграв с большим количеством комбинаций, я обнаружил, что работа DID заключается в указании формата гггг-мм-дд в моем вызове плагина datepicker — это противоположно тому, что я хотел, но, по крайней мере, даты могут быть успешно сохранены. Таким образом, вызов средства выбора даты выглядит следующим образом:
$( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' });
При выборе 31 марта в календаре поле заполняется 2012-03-31, и после сохранения все еще отображается как 2012-03-31.
Но как заставить средство выбора даты работать с форматом мм/дд/гг? Я не могу представить, что это сложно сделать, но что я упускаю? Должен ли я что-то делать с тем, как даты хранятся в Postgres? (Они указываются как дата, а не дата-время.)