QA@IT

デフォルトの日付区切り文字について

2866 PV

Rails 3.2 を使っています。

日付の区切り文字を '/' にして扱いたいです。

以下のように設定しています。

$ grep default config/initializers/datetime_formats.rb
Time::DATE_FORMATS[:default] = "%Y/%m/%d %H:%M"
Date::DATE_FORMATS[:default]  = "%Y/%m/%d"

しかし、以下のように編集画面を開くと日付の区切り文字が '-' になってしまいます。

 <%= f.text_field :birthday %>

中途半端に区切り文字が効いていない感じです。
日付データの入った編集画面を開いたときにスラッシュ区切りで表示するにはどうしたら良いでしょうか?

P.S
ちなみに console で確認すると以下のようになります。

[1] pry(main)> User.last
=> #<User id: 954179051, name: "花子", birthday: "2013-04-08", created_at: "2013-04-25 08:10:09", updated_at: "2013-04-25 08:10:09">

↑この表示で日付の区切りがスラッシュにできれば良さそう。

[2] pry(main)> User.last.birthday
=> 2013/04/08

指定すると変換してくれている。

回答

日付データの入った編集画面を開いたときにハイフン区切りで表示するには

「スラッシュ区切りで表示するには」の誤りでしょうか?

form tag helper の input (text_field etc.)の value には、アクセサに _before_type_cast の値を付けて呼び出した返値が使われます。

要望の解決案としては、

  • value: オプションに user.birthday.to_s (or strftime) を明示する。
  • User#birthday_before_type_cast を上書きする。(影響が大きいので非推奨)
  • f.text_field ではなく、f.date_select を利用。要素の順序や区切りを指定する。

などが考えられます。

編集 履歴 (0)
  • ご指摘の記述ミス、修正しました。

    なるほど、_before_type_cast が効いているのですね。
    value: オプションに to_s で対応したいと思います。

    ありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。