Chciałbym utworzyć taki obserwator aby był wywoływany tylko dla jednej metody.
Mam sobie model Baner.
Dla każdego wywołania baner.image chciałbym aby pole w bazie było zwiększane o 1.
[code]class Baner < ActiveRecord::Base
has_attached_file :image
def pageview_inc
pageview += 1
save
end
alias old_image image
def image
old_image
end[/code]
Czy da się ustawić tak obserwatora, aby był wywoływany dla tej klasy i tylko przy wywołaniu metody image? Żeby po wywołaniu metody image wywoływał pageview_inc.
Nie wiem dokładnie w jakim celu aliasujesz metodę, ale wg mnie wygląda na to, że coś źle przy tym robisz.
Może ten prosty przykład zastosowania aliasowania metod pomoże Ci wyjść na prostą.
[code ruby]class A
def met
puts “old method”
end
end
class B < A
alias oldmet met
def met
puts “something new”
oldmet
end
end
To rozwiązanie technicznie jest ok, ale nie wiem czy podejście nie powinno być inne. Używasz tego do zliczenia wyświetleń obrazka? Jeżeli tak, to bardziej paswoałoby zrobić jakieś presentera, który opakuje ten model.