2011-08-30 18 views
8
Ap::Application.routes.draw do 
    resources :accounts 
end 

Quiero saber la clase o módulo al que pertenece el método "recursos". Si busco el método de "recursos" en http://apidock.com/rails/ (en el cuadro de texto de búsqueda provisto), aparece una lista de clases que tiene el nombre de método "recursos". Confundido, con saber el origen del método.Determine la clase a la que pertenece un método en los raíles

Son sus comandos que puedo usar en puts para ver el origen.

La pregunta es un poco de nivel para principiantes.

Gracias

+0

No es para nada una pregunta para principiantes. Rails oculta gran parte de sus elementos internos, pero la razón general es que, por lo general, no es necesario saberlo. – Chowlett

Respuesta

2

Ruby es un lenguaje orientado a objetos. Y mientras que los métodos no son objetos en Ruby, puede pedir a Ruby a darle un objeto Method que representa el método en cuestión, y entonces puede simplemente decir que Method para darle su propietario:

Ap::Application.routes.draw do 
    p method(:resources).owner 
end 
6

Más esclarecedor que la búsqueda de resources es la búsqueda de draw, ya que el método tiene que hacer algo con el bloque se ha pasado.

De hecho, nos encontramos con el código fuente de draw, lo que demuestra que la bloques suministrado se ejecuta en el contexto de un Mapper, que include s Resources, que (por fin!) define resources

+0

También vale la pena señalar que los resultados de búsqueda para 'resources' incluyen dos clases (los nombres comienzan con capital) y tres métodos; uno de los métodos se muestra como> = v1.2.0 <= v2.3.8, por lo que está obsoleto, y uno es miembro de 'DeprecatedMapper', lo que sugiere que es demasiado. – Chowlett

+0

Muchos Rails se dividen en módulos, lo que es ideal para organizar la fuente pero fragmenta la documentación. Sería bueno si hubiera una mejor manera de hacer esto. – tadman

+0

Gracias Chowlett. Pude encontrar el módulo 'ActionDispatch :: Routing :: Mapper :: Resources' donde el método de recursos se define siguiendo sus pasos. No estoy seguro de que pueda aplicar este método para todos los métodos. siento que stackoverflow permite que solo una respuesta se marque como correcta. Pero seguro uno por voto. :-) Gracias de nuevo por la ayuda. – rajkamal

0

Supongamos que current_user es una instancia de Usuario de clase, puede llamar a la función de método para verificar si method_name pertenece a la clase User. Ejemplo

current_user.method(:method_name).owner 
User.method(:method_name).owner 

Espero que esto te ayude!

Cuestiones relacionadas