Nie mogę zamienić metody to_s w klasie Time

Chciałem zmienić na stałe w całej aplikacji wyświetlanie obiektów Time na stronie podmieniając metodę to_s.
Robiłem już tak z innymi klasami (np Date) i działało. A po dodaniu klasy Time mam “500 Internal Server Error”.

<%= Date.new(2008,1,1) %><br /> => 01-01-2008 <%= Time.new() %><br />
Dodałem kod do environment.rb

[code]class Date
def to_s
self.strftime(’%d-%m-%Y’)
end
end

class Time # bez tej klasy jest OK
def to_s
self.strftime(’%Y-%m-%d %H:%M’)
end
end[/code]
Może ktoś ma pomysł, czy można coś z tym zrobić?
Nie chce mi się za każdym razem sprawdzać czy pole jest klasy Time i wywoływać strftime.
W kilku modelach mam trochę takich pól i kilka helperów.
Zgodnie z DRY powinno to się ustawić tylko raz

Pozdrowienia

Zacznijmy od tego, że pomysł jest głupi straszliwie.
Dodaj do application_helper metodę formatującą datę tak jak chcesz.
Jeśli już musisz otwierać istniejące klasy Rubiego, to

  • nie rób tego w environment.rb, tylko zrób plugin albo daj do RAILS_ROOT/lib
  • dopisz metodę typu Time#custom_to_s, a nie nadpisuj domyślną

Na pewno w logach masz cały backtrace i możesz w niego zajrzeć. Probowałeś?
Ja bym sobie ustawił

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!( :default => "%Y-%m-%d %H:%M:%S", :date_time12 => "%m/%d/%Y %I:%M%p", :date_time24 => "%m/%d/%Y %H:%M", :only_date => "%Y-%m-%d" )
Monkey patching jest fajny, ale bywa problematyczny.

Dzięki za pomoc. Już mi się oczy otwarły.
ActiveSupport nadpisuje to_s dla Time dodając parametr formatowania.
W logach było: wrong number of arguments (1 for 0)
Zamiast “monkey patching” dodałem :default do stałej.
I działa!!!
Dzięki seban