2012-05-20 8 views
10

In Rails, supponendo che il file sia già stato caricato, come è possibile chiamare my_method da questo esempio dalla console?Chiamare un metodo ApplicationController dalla console in Rails

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

Sembra davvero interessante. Ma il mio primo pensiero sarebbe che tutti i metodi all'interno dei controller sono accessibili dalle viste.Quando accedi alla console, accedi a ActiveRecord e accedi ai tuoi modelli e ai loro metodi. Come ho detto, questo sarebbe il mio primo pensiero. – Daniel

+0

http://stackoverflow.com/q/151030/2355112 ha ottime risposte riguardo lo stesso problema. – oozzal

risposta

27

Un altro modo molto semplice per eseguire questa operazione è utilizzare un'istanza di ApplicationController.

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

Poi nella console, è possibile effettuare le seguenti operazioni:

>> ApplicationController.new.example 

Ciò produrrà il seguente:

O HAI 

Questo, naturalmente, ha la limitazione di non avere accesso a qualsiasi richiesta normale, come l'oggetto request. Se avete bisogno di questo, come ha suggerito il Patrick Klingemann, è possibile utilizzare il debugger ... Io personalmente raccomando usando leva:

Questo è probabilmente troppo tardi per voi , ma speriamo che possa aiutare qualcuno in futuro.

+1

ottime soluzioni, aiuto per la scrittura di viste e casi di test del controller. –

3

uso debugger:

nel Gemfile aggiuntivo:

gem 'debugger' 

poi dal terminale:

> bundle 
> rails s --debugger 

nella azione di controllo si sta colpendo:

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

quindi puntare il browser a: http://localhost:3000/widgets, la pagina non terminerà il caricamento. Ritorna al terminale in cui è in esecuzione il server e esegui una sessione di debug interattiva da cui eseguire: my_method

+0

In realtà mi sono dimenticato del debug. Notare che non si otterrà l'accesso al metodo di avvio del server in quel modo. Dovresti: rails s - debugger.E anche in questo caso l'unica risposta che ottieni è "Basta premere un metodo ApplicationController" ... nessuna uscita effettiva – Daniel

+0

Ho pensato a --debugger mentre andavo a dormire, buon punto. Non sono sicuro di capire la seconda frase del tuo commento. –

+0

bene ho provato a riprodurre il caso Martin impostato per noi, ma quello che ottengo è quel messaggio ... Voglio dire che non posso effettivamente controllare cosa succede nel metodo quando lo chiamo. Potrei fare qualcosa di sbagliato però .. – Daniel

0

Non è esattamente la domanda, ma è anche possibile eseguire il debug con la gemma pry, analogamente a debugger.

Aggiungi al Gemfile:

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

nel metodo:

def myMethod 
    binding.pry 
    # some code 
end 

Fatto!

Quando si esegue il metodo, l'elaborazione della pagina si bloccherà a binding.pry e la leva prenderà in carico il prompt. Digita n per ogni nuovo passo del metodo e gioca con le tue variabili che possono essere stampate (semplicemente digitandole) in "tempo reale"!

Problemi correlati