Jak wyświetlić listę wszystkich metod, do których dany obiekt ma dostęp?
Mam @current_user
obiekt zdefiniowany w kontrolerze aplikacji:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
I chcę zobaczyć, jakie metody mam dostępne w pliku widoku. W szczególności chcę zobaczyć, jakie metody :has_many
zapewnia stowarzyszenie. (Wiem, co :has_many
powinienem zapewnić, ale chcę to sprawdzić.)
ruby-on-rails
ruby
Sztylet
źródło
źródło
@current_user
?Odpowiedzi:
Poniżej wymieniono metody, które ma klasa User, a których podstawowa klasa Object nie ma ...
Zauważ, że
methods
jest to metoda dla klas i dla instancji klas.Oto metody, które ma moja klasa User, które nie należą do klasy bazowej ActiveRecord:
Należy zauważyć, że metody utworzone w wyniku (wielu) relacji has_many zdefiniowanych w klasie User nie znajdują się w wynikach
methods
wywołania.Dodano Uwaga: has_many nie dodaje metod bezpośrednio. Zamiast tego, maszyna ActiveRecord wykorzystuje Ruby
method_missing
iresponds_to
techniki do obsługi wywołań metod w locie. W rezultacie metody nie są wymienione wmethods
wyniku metody.źródło
Moduł # instance_methods
źródło
Lub po prostu
User.methods(false)
zwrócić tylko metody zdefiniowane w tej klasie.źródło
Możesz to zrobić
Dla lepszego wpisu
źródło
A co z jednym z nich?
źródło
Załóżmy, że użytkownik ma_many postów:
źródło
Aby wyjaśnić odpowiedź @ clyfe. Możesz uzyskać listę swoich metod instancji za pomocą następującego kodu (zakładając, że masz klasę obiektu o nazwie „Parser”):
źródło
Jeśli szukasz listy metod, które odpowiadają przez instancję (w twoim przypadku @current_user). Zgodnie z metodami dokumentacji ruby
Alternatywnie możesz również sprawdzić, czy metoda jest wywoływana na obiekcie, czy nie ?.
Jeśli nie chcesz metod klas nadrzędnych, po prostu odejmij od nich metody klasy nadrzędnej.
źródło