Como faço para listar todos os métodos aos quais um determinado objeto tem acesso?
Eu tenho um @current_user
objeto, definido no controlador do aplicativo:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
E quero ver quais métodos eu tenho disponíveis para mim no arquivo de visualização. Especificamente, quero ver quais métodos uma :has_many
associação oferece. (Eu sei o que :has_many
devo fornecer, mas quero verificar isso.)
ruby-on-rails
ruby
Dirk
fonte
fonte
@current_user
?Respostas:
O seguinte irá listar os métodos que a classe User possui que a classe Object base não possui ...
Observe que
methods
é um método para Classes e para instâncias de Class.Aqui estão os métodos que minha classe de usuário possui que não estão na classe base ActiveRecord:
Observe que os métodos criados como resultado dos (muitos) relacionamentos has_many definidos na classe User não estão nos resultados da
methods
chamada.Adicionado Observe que: has_many não adiciona métodos diretamente. Em vez disso, o mecanismo ActiveRecord usa o Ruby
method_missing
e asresponds_to
técnicas para lidar com chamadas de método em tempo real. Como resultado, os métodos não são listados nomethods
resultado do método.fonte
Módulo # instance_methods
fonte
Ou apenas
User.methods(false)
para retornar apenas os métodos definidos nessa classe.fonte
Você pode fazer
Para uma melhor lista
fonte
Que tal um desses?
fonte
Suponha que o usuário has_many posts:
fonte
Para expor a resposta de @clyfe. Você pode obter uma lista de seus métodos de instância usando o seguinte código (supondo que você tenha uma classe de objeto chamada "Parser"):
fonte
Se você está procurando uma lista de métodos que respondem por uma instância (no seu caso @current_user). De acordo com os métodos de documentação ruby
Como alternativa, você também pode verificar se um método pode ser chamado em um objeto ou não.
Se você não quiser os métodos da classe pai, apenas subtraia os métodos da classe pai.
fonte