Nienienie 
W tym wypadku dużo czyściej jest tak jak zaczął, czyli wykorzystanie dziedziczenia.
weisu:
Jeżeli już naprawdę musisz nadpisywać find, to zrób do tego trochę testów, które sprawdzą czy find działa tak jak powinno.
Jeżeli chodzi o to co tam ma być, to musisz pamiętać, że jeżeli railsy obsługują wiele różnych formatów find, to Ty też musisz:
.find(1)
.find([1, 2, 3])
.find(:first)
.find(:all, :conditions => {:published = false})
Mógłbyś przykładowo zrobić coś takiego:
[code]def self.find(*args)
joins = Array.new
self.reflect_on_all_associations.each { |a| joins << a.name }
unless args.last.is_a?(Hash)
args << {}
end
args.last.merge!({:joins => joins})
super(*args)
end[/code]
Tylko to jest kompletnie bez sensu moim zdaniem, bo zawsze ci będzie pobierało wszystkie asocjacje. W ten sposób nawet robiąc Model.find(:first) będziesz zajeżdżał sobie bazę.
Już lepiej zrobić coś takiego:
[code]def self.find_with_associations(*args)
joins = Array.new
self.reflect_on_all_associations.each { |a| joins << a.name }
unless args.last.is_a?(Hash)
args << {}
end
args.last.merge!({:joins => joins})
find(*args)
end
#i wtedy tam gdzie musisz mieć asocjacje używasz np:
Model.find_with_associations(:first)[/code]
Nie sprawdzałem powyższego kodu, ale na ok o powinien działać 
Tylko pamiętaj o jednej rzeczy:
domyślnie stosowany jest w railsach left inner join, czyli jeżeli nie ma rekordów powiązanych z tym, który chcesz wyciągnąć, to nie dostaniesz tego rekordu.
Np. jak masz User has_many :messages i zrobisz User.find(10, :joins => :messages), a user o id == 10 nie ma żadnych wiadomości, to dostaniesz wyjątek ActiveRecord::RecordNotFound chociaż user o id == 10 istnieje. Jeżeli w Twoim przypadku tak jest to użyj koniecnzie :include zamiast join.
UPDATE:
Podkreślę może jeszcze raz to co napisałem na początku:
Jeżeli ktoś chce nadpisać metodę z klasy nadrzędnej to nie ma najmniejszego sensu używać alias_method lub alias_method_chain. Wystarczy poprawnie wykorzystać dziedziczenie.
UPDATE2:
Uaktualniłem kod, żeby obsługiwał format Model.find(1, 2, 3)