(Моя проблема почти такая же, как описанная в этом вопросе, только этот ответ не работает в моем случае.)
Я использую jQuery UI Datepicker в приложении Rails с db Postgres. Реализация по умолчанию использует формат даты мм/дд/гг, чтобы отобразить выбранную дату, и именно этого я хочу. Однако, после сохранения записи в базе данных, месяц и день меняются на противоположные - тогда она отображается как yy-dd-mm. Таким образом, выбор 3/11/2012 пытается сэкономить 3 ноября вместо 11 марта, а дата типа 3/31/2012 вообще не сохраняется, потому что ее не существует.
Я пропустил еще 3 различных способа, чтобы исправить это:
1) Первая попытка состояла в том, чтобы переформатировать текстовое поле, чтобы дисплей выглядел так, как я хотел:
<%= f.text_field :foo, :value => (@model.foo.blank? ? '' : @model.foo.strftime('%m/%d/%Y')), class: "datepicker" %>
Это отобразилось 03/31/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 указывала формат yyyy-mm-dd в моем обращении к плагину datepicker - это противоположность того, что я хотел, но, по крайней мере, даты могут быть успешно сохранены. Поэтому вызов datepicker выглядит следующим образом:
$( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' });
Выбор 31 марта из календаря заполняет поле 2012-03-31 и по-прежнему отображается как 2012-03-31 после сохранения.
Но как я могу заставить datepicker работать с форматом mm/dd/yy? Я не могу себе представить, что это сложно сделать, но чего я не хватает? Должен ли я что-то делать с тем, как даты хранятся в Postgres? (Они указаны как дата, а не дата и время.)