Rozszerzam klasy (która jest w plugin) poprzez włączenie modułu, odbywa się to w inicjator.Jak przedłużyć klasę z inicjalizatora i załadować ją ponownie w środowisku programistycznym?
require 'qwerty/core/user'
User.send :include, Qwerty::Core::Extensions::User
Jednak w rozwoju przed każdą prośbę (i po przeładowaniu! Nazywany jest w konsoli) Wszystkie modele są przeładowane, ale dlatego, że nie są prowadzone inicjalizatory ponownie moduł nie jest wliczony w cenę. Pozostawienie modelu z "brakującymi częściami".
Ponieważ model jest w wtyczce, nie wydaje się rozsądne dołączanie kodu bezpośrednio do klasy, co byłoby typowym podejściem.
Na razie dodałem po prostu filtr before_filter, który zawiera moduł, jeśli znajduje się w środowisku programistycznym. Ale mam skopiować/wkleić i mieć duplikat kodu w inicjatora i kontrolera aplikacji.
# Class extensions in initalizers are over-writtern each request
def development_loading
if RAILS_ENV == 'development'
User.send :include, Qwerty::Core::Extensions::User
end
end
Czy istnieje lepszy sposób?
marginesie plugin jest moja, więc mogę dodać kod do niego, ale rozszerzenia utrzymywane w module nie zawsze może być obecny ...
To działało dla mnie, ale w application.rb (rails 3.0.20), nie environment.rb – tekniklr
To działa idealnie w szynach 4, jeśli dodasz to do engine.rb w silniku szyn. Dzięki! –