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
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ą
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