日時(DateTime)のデフォルト
Railsの DateTime型を使っていて「なんで日付の標記が YYYY-MM-DD やねん!」とイラっときたこと、ありませんか? 私はよくあります。
なにもしない場合
PS C:\home\www\3n10> ruby script/console >> DateTime.now => Fri, 24 Oct 2008 05:56:28 +0900 >> DateTime.now.to_s => "2008-10-24T05:56:34+09:00" >> DateTime.now.to_s(:db) => "2008-10-24 05:56:49"
こんな風に YYYY-MM-DDで返ってきます。使うときにいちいち、DateTime.now.to_s(:db).gsub("-", "/") なんてこと、やります? やってもいいですけど、もう少しマシな方法があります。
デフォルトを変える
config/environment.rb の最後に次の1文を加えます。
ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS[:default] = "%Y/%m/%d %H:%M:%S"
最後の endの上(Rails::Initializer.runブロックの中)に加えてはダメです。endの下です。そうしないと、こんなエラーが出ます。
Loading development environment (Rails 2.1.0) C:/home/www/3n10/config/environment.rb:77:NameError: uninitialized constant ActiveSupport c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:93:NoMethodError: undefined method `cattr_accessor' for ActionController::Di spatcher:Class C:/home/www/3n10/app/controllers/application.rb:4:NameError: uninitialized constant ActionController::Base
設定を正しく書き加えたら確認してみましょう。
PS C:\home\www\3n10> ruby script/console >> DateTime.now => Fri, 24 Oct 2008 05:56:28 +0900 >> DateTime.now.to_s => "2008/10/24 05:51:22" >> DateTime.now.to_s(:db) => "2008-10-24 05:56:49"
to_sは設定通りになっていますね。to_s(:db)は元のままです。to_s(:db)にしているところは、to_sに置き換えましょう。