2012-05-20 38 views
10

En Rails, suponiendo que el archivo ya está cargado, ¿cómo es posible llamar al my_method desde este ejemplo desde la consola?Llamar a un método ApplicationController desde la consola en Rails

# some_file.rb 
class MyClass < ApplicationController::Base 
    def my_method(args) 
+0

Eso realmente suena interesante. Pero mi primer pensamiento fue que todos los métodos dentro de los controladores son accedidos por las vistas.Cuando accede a la consola, accede a ActiveRecord y obtiene acceso a sus modelos y sus métodos. Como dije, eso sería lo primero que pensé. – Daniel

+0

http://stackoverflow.com/q/151030/2355112 tiene muy buenas respuestas con respecto al mismo problema. – oozzal

Respuesta

27

Otra forma muy simple de hacerlo es usar una instancia de ApplicationController.

ApplicationController < ActionController::Base 
    def example 
    "O HAI" 
    end 
end 

Luego, en la consola, puede hacer lo siguiente:

>> ApplicationController.new.example 

Esta es la salida siguiente:

O HAI 

Esto, por supuesto, tiene la limitación de no tener acceso a todo lo que haría una solicitud normal, como el objeto request. Si usted necesita esto, como lo sugiere el Klingemann Patrick, se puede utilizar el depurador ... Yo personalmente recomiendo el uso de palanca:

Esto es probablemente demasiado tarde para ti , pero con suerte ayudará a alguien en el futuro.

+1

muy buenas soluciones, ayuda para escribir ver y casos de prueba de controlador. –

3

uso depurador:

en su Gemfile complemento:

gem 'debugger' 

luego desde el terminal:

> bundle 
> rails s --debugger 

en la acción del controlador que está golpeando:

class WidgetsController < ApplicationController 
    def index 
    debugger 
    @widgets = Widget.all 
    respond_with @widgets 
    end 
end 

luego, dirija su navegador a: http://localhost:3000/widgets, la página no terminará de cargarse. Regrese a la terminal donde se ejecuta su servidor y estará en una sesión de depuración interactiva donde puede ejecutar: my_method

+0

De hecho, me olvidé de la depuración. Sin embargo, notará que no tendrá acceso al método de inicio de su servidor de esa manera. Necesitarías: rails s --debugger.Y aún en ese caso, la única respuesta que obtienes es "Solo haz clic en el método ApplicationController" ... no hay salida real – Daniel

+0

Pensé en el --debugger cuando me fui a dormir, buen punto. No estoy seguro de entender la segunda oración en tu comentario. –

+0

, así que traté de reproducir la caja que Martin preparó para nosotros, pero lo que recibo es ese mensaje ... Quiero decir que no puedo verificar qué está pasando dentro del método cuando lo llamo. Sin embargo, podría estar haciendo algo mal ... – Daniel

0

No es exactamente la pregunta, pero también puede depurar con la gema pry, de manera similar a debugger.

Añadir a la Gemfile:

gem "pry" 
gem "pry-remote" 
gem "pry-stack_explorer" 
gem "pry-debugger" 

En su método:

def myMethod 
    binding.pry 
    # some code 
end 

Hecho!

Cuando ejecuta su método, el procesamiento de la página se congelará en binding.pry y la palanca se encargará del aviso. Escriba n para cada nuevo paso del método, y juegue con sus variables que se pueden imprimir (simplemente tipeando) en "tiempo real".

Cuestiones relacionadas