Pokud chcete automaticky mít zobrazená všechna data v českém formátu, tak ideální DRY postup je přidat do config/environment.rb řádky (první pro datum, druhý pro čas):

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS[:default] = '%d.%m.%Y'
ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS[:default] = '%d.%m.%Y %H:%M'

Jenže ouha, tohle vám rozbije zpětnou konverzi dat od uživatele – Rails ve verzi 2.1 totiž dají přednost formátu mm.dd.yyyy před dd.mm.yyyy (08.01.2008 tedy uloží jako 1. srpen 2008) a nenašel jsem žádnou možnost tohle chování změnit. Pokud chcete všechno provést bez použití pluginů, tak můžete předefinovat metody string_to_date a string_to_time v ActiveRecord, které se starají o konverzi textových řetězců na objekty Date resp. DateTime. Vytvořte soubor config/initializers/active_record.rb a vložte do něj:

module ActiveRecord
  module ConnectionAdapters
    class Column
      def self.string_to_date_with_european_format(string)
        begin
          Date.strptime(string, '%d.%m.%Y')
        rescue
          string_to_date_without_european_format(string)
        end
      end
      def self.string_to_time_with_european_format(string)
        begin
          DateTime.strptime(string, '%d.%m.%Y %H:%M')
        rescue
          string_to_time_without_european_format(string)
        end
      end
      class << self
        alias_method_chain :string_to_date, :european_format
        alias_method_chain :string_to_time, :european_format
      end
    end
  end
end

Restartujte webserver a hotovo. Předefinované metody se v případě neúspěchu s konverzí pokusí zavolat svojí původní verzi, takže se nemusíte bát, že by přestaly fungovat konverze z oblíbených formátů yyyy-mm-dd a jiných.

Komentáře jsou uzavřeny.