¿Cómo enumero todos los métodos a los que tiene acceso un objeto en particular?
Tengo un @current_user
objeto, definido en el controlador de la aplicación:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
Y quiero ver qué métodos tengo disponibles en el archivo de vista. Específicamente, quiero ver qué métodos :has_many
proporciona una asociación. (Sé lo que :has_many
debería proporcionar, pero quiero comprobarlo).
ruby-on-rails
ruby
Puñal
fuente
fuente
@current_user
?Respuestas:
A continuación, se enumeran los métodos que tiene la clase de usuario que la clase de objeto base no tiene ...
Tenga en cuenta que
methods
es un método para clases y para instancias de clase.Estos son los métodos que tiene mi clase de usuario que no están en la clase base de ActiveRecord:
Tenga en cuenta que los métodos creados como resultado de las (muchas) relaciones has_many definidas en la clase Usuario no están en los resultados de la
methods
llamada.Agregado Tenga en cuenta que: has_many no agrega métodos directamente. En cambio, la maquinaria ActiveRecord utiliza Ruby
method_missing
yresponds_to
técnicas para manejar llamadas a métodos sobre la marcha. Como resultado, los métodos no se enumeran en elmethods
resultado del método.fuente
Módulo # instance_methods
fuente
O simplemente
User.methods(false)
para devolver solo los métodos definidos dentro de esa clase.fuente
Tu puedes hacer
Para una mejor lista
fuente
¿Y uno de estos?
fuente
Supongamos que el usuario tiene_many publicaciones:
fuente
Para exponer la respuesta de @ clyfe. Puede obtener una lista de sus métodos de instancia utilizando el siguiente código (asumiendo que tiene una clase de objeto llamada "Analizador"):
fuente
Si está buscando una lista de métodos que responden por una instancia (en su caso, @current_user). Según los métodos de documentación ruby
Alternativamente, también puede verificar que un método sea invocable en un objeto o no.
Si no desea métodos de la clase principal, simplemente reste los métodos de la clase principal.
fuente