Český formát data v Ruby on Rails 2.1
Vydal Láďa Durchánek v Ruby on Rails, tags: ActiveRecord, lokalizacePokud 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.

Příspěvky (RSS)