Jak prawidłowo zrobić coś w metodzie destroy

Hej,
Mam taką sytuacje że mam klase do przechowywania zdjęc jako pliki

[code]class Photo < ActiveRecord::Base
has_one :book_page_template


def destroy
logger.info “likwidacja pliku”

end[/code]
Teraz chciałbym w destroy usunąc plik który jest powiązany z rekordem w bazie danych.
Plik się usuwa, niemniej rekord z bazy danych nie.
Jak wywołać w mojej metodzie destroy oryginalną metode, trzeba jakiś alias wcześniej do niej zrobić czy coś takiego?
Pozdrawiam i z góry dzieki za info.
Krzysiek

Można to zrobić jako alias:

alias old_destroy destroy def destroy ... #Twoj kod old_destroy end
Tym niemniej lepiej skorzystać z callbacka after_destroy lub before_destroy, np.

[code=ruby]before_destroy :destroy_this_nasty_thing

def destroy_this_nasty_thing

Twoj kod

end[/code]
To drugie rozwiązanie jest lepsze ponieważ jeśli będziesz dziedziczył z tej klasy to będziesz mógł zastosować tę samą technikę,
a poza tym odpowiednie callbacki zostaną wywołane we właściwej kolejności.

Można to zrobić jako alias:

alias old_destroy destroy def destroy ... #Twoj kod old_destroy end
[/quote]
Trochę przekombinowane ;-). Wystarczy ‘super’:

def destroy ... #Twoj kod super end
Jednakże sposób z callbackami jest najlepszy.

dzieki,
zrobilem za pomocą before_destroy i działa super :slight_smile:
krzysiek

Fakt - zapomniałem, że destroy nie jest generowane, tylko po prostu zdefiniowane w AR::Base. Za dużo metaprogramowania… :slight_smile: