(私の問題は、この質問で説明されているものとほとんど同じですが、私の場合、その答えだけが機能しません。)
Postgres db を使用して Rails アプリでjQuery UI Datepickerを使用しています。デフォルトの実装では、mm/dd/yy日付形式を使用して、選択した日付を表示します。これはまさに私が望むものです。ただし、レコードをデータベースに保存すると、月と日が逆になり、yy-dd-mmとして表示されます。したがって、2012 年 3 月 11 日を選択すると、3 月 11 日ではなく 11 月 3 日として保存され、2012 年 3 月 31 日などの日付は存在しないため、まったく保存されません。
これを修正しようとして、これまでに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 が機能することがわかったのは、datepicker プラグインへの呼び出しで yyyy-mm-dd 形式を指定することでした。これは私が望んでいたものとは逆ですが、少なくとも日付は正常に保存されました。したがって、datepicker 呼び出しは次のようになります。
$( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' });
カレンダーから 3 月 31 日を選択すると、フィールドに 2012-03-31 が入力され、保存後も 2012-03-31 として表示されます。
しかし、どうすれば日付ピッカーを mm/dd/yy 形式で動作させることができますか? それが難しいことだとは想像できませんが、何が欠けているのでしょうか? 日付が Postgres に保存される方法を変更する必要はありますか? (日時ではなく、日付として指定されます。)