2012-05-20 6 views
10

In Rails, vorausgesetzt, dass die Datei bereits geladen ist, wie ist es möglich, my_method von diesem Beispiel aus der Konsole aufzurufen?Aufruf einer ApplicationController-Methode von der Konsole in Rails

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

Das klingt eigentlich interessant. Aber mein erster Gedanke wäre, dass alle Methoden innerhalb der Controller von den Ansichten zugegriffen werden.Wenn Sie auf die Konsole zugreifen, greifen Sie auf ActiveRecord zu und erhalten Zugriff auf Ihre Modelle und deren Methoden. Wie gesagt, das wäre mein erster Gedanke. – Daniel

+0

http://stackoverflow.com/q/151030/2355112 hat wirklich gute Antworten in Bezug auf das gleiche Problem. – oozzal

Antwort

27

Eine andere, sehr einfache Möglichkeit ist eine Instanz von ApplicationController selbst zu verwenden.

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

dann in der Konsole können Sie wie folgt vorgehen:

>> ApplicationController.new.example 

erhalten Sie folgende Ausgabe die folgenden:

O HAI 

Dies hat natürlich die Einschränkung der keinen Zugang Zu allem was eine normale Anfrage wäre, wie das request Objekt selbst. Wenn Sie diese benötigen, wie der Patrick Klingem vorgeschlagen, könnten Sie den Debugger verwenden ... Ich persönlich empfehle mit Pry:

Dies ist wahrscheinlich viel zu spät für Sie , aber hoffentlich wird es jemandem in der Zukunft helfen.

+1

sehr gute Lösungen, Hilfe zum Schreiben von Ansichten und Controller-Testfälle. –

3

Verwendung Debugger:

in Ihrem Gemfile add:

gem 'debugger' 

dann aus der Klemme:

> bundle 
> rails s --debugger 

in der Controller-Aktion Sie schlagen:

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

dann zeigen Sie Ihren Browser auf: http://localhost:3000/widgets, die Seite wird nicht fertig geladen. Kehren Sie zum Terminal zurück, auf dem Ihr Server ausgeführt wird, und Sie befinden sich in einer interaktiven Debugging-Sitzung, in der Sie Folgendes ausführen können: my_method

+0

Ich habe das Debuggen vergessen. Beachten Sie, dass Sie keinen Zugriff auf die Methode bekommen, die Ihren Server so startet. Sie müssten: rails s --debugger.Und selbst in diesem Fall ist die einzige Antwort, die Sie erhalten, ist "Nur eine ApplicationController-Methode zu treffen" ... keine tatsächliche Ausgabe – Daniel

+0

Ich dachte an die - Debugger, als ich schlafen ging, guter Punkt. Ich bin mir nicht sicher, ob ich den zweiten Satz in Ihrem Kommentar verstehe. –

+0

Nun, ich habe versucht, den Fall zu reproduzieren, den Martin für uns eingerichtet hat, aber was ich bekomme, ist diese Nachricht ... Ich meine, ich kann nicht wirklich überprüfen, was in der Methode passiert, wenn ich sie anrufe. – Daniel

0

Es ist nicht genau die Frage gestellt, aber Sie können auch mit dem pry Edelstein, ähnlich wie debugger debuggen.

zum Gemfile hinzufügen:

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

In Ihrer Methode:

def myMethod 
    binding.pry 
    # some code 
end 

Fertig!

Wenn Sie Ihre Methode ausführen, wird die Seitenverarbeitung bei binding.pry einfrieren und Pry übernimmt die Eingabeaufforderung. Geben Sie n für jeden neuen Schritt der Methode ein, und spielen Sie mit Ihren Variablen, die gedruckt werden können (tippen Sie sie einfach) in "Echtzeit"!

Verwandte Themen