Jak dodać obserwator dla tylko jednej metody

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.

a nie można wywołać pageview_inc wprost z metody image?

def image old_image self.pageview += 1 self.save! end
Albo

def image self.pageview += 1 self.save! old_image end
Efekt:

stack level too deep.

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

B.new.met[/code]

Dlaczego alias_method > alias

Rozwiązanie na mój problem

[code=ruby]class Baner < ActiveRecord::Base
has_attached_file :image

alias_method :old_image, :image

def image
increment!(:pageview)
old_image
end
end[/code]

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.

Już działa jak ta lala, więc zgodnie z zasadą dont fix it if it aint broke nie będę tego dotykał.