2015-08-31 11 views
7

Próbuję użyć zawężania ruby ​​do zastosowania haków szyn.Udoskonalenia i haki ruby ​​

Chcę uniknąć łatania małp. Kiedy małpa łatanie go będzie działać jako taki

ActiveRecord::Base.class_eval do 
    after_find do 
    # do something with 
    my_method 
    end 

    def my_method 
    # something useful 
    end 
end 

udało mi się mieć metodę klasy robiąc coś takiego:

module ActiveRecordRefinements 
    refine ActiveRecord::Base.singleton_class do 
    def my_method 
    #something cool 
    end 
    end 
end 

Ale nie mogę uruchomić hak. Próbowałem używać self.used(klass), ale wydaje się, że nie można uzyskać poprawnej składni.

Każda pomoc jest mile widziane.

Dzięki.

+2

Nie musisz wywoływać '# singleton_class' na' ActiveRecord :: Base', ponieważ udoskonalenia są singletonami. – Nathan

+0

Próbuję dodać do DSL z AR. Coś jak '' ' class Foo Max

+0

Istnieje cienka linia między łataniem małpy i zastrzykiem zależności. Normalnie łatanie małp jest zdefiniowane jako przedefiniowanie podstawowego zachowania w sposób, który niekoniecznie będzie działał z przyszłymi wersjami jądra. Czysty model wprowadzania zależności próbuje uniknąć konfliktu i utrzymać minimalny ślad. – tadman

Odpowiedz