2012-05-20 10 views
10

W Railsach, zakładając, że plik jest już załadowany, jak można z tego przykładu wywołać my_method z konsoli?Wywołanie metody ApplicationController z konsoli w Railsach

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

To brzmi interesująco. Ale moją pierwszą myślą było, że wszystkie metody wewnątrz kontrolerów są dostępne dla widoków.Gdy wchodzisz na konsolę, uzyskujesz dostęp do ActiveRecord i uzyskujesz dostęp do swoich modeli i ich metod. Jak powiedziałem, to byłaby moja pierwsza myśl. – Daniel

+0

http://stackoverflow.com/q/151030/2355112 ma naprawdę dobre odpowiedzi dotyczące tego samego problemu. – oozzal

Odpowiedz

27

Innym, bardzo prostym sposobem na to jest użycie instancji o numerze ApplicationController.

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

Następnie w konsoli, można wykonać następujące czynności:

>> ApplicationController.new.example 

To wyjście będzie następujący:

O HAI 

To, oczywiście, jest ograniczenie braku dostępu do wszystkiego, co normalnie by było, np. obiekt request. Jeśli to potrzebne, jak sugerował Patrick Klingemann, można użyć debuggera ... Ja osobiście polecam korzystając Pry:

to prawdopodobnie zbyt późno dla ciebie , ale mam nadzieję, że pomoże to komuś w przyszłości.

+1

bardzo dobre rozwiązania, pomoc przy pisaniu widoku i przypadki testowe kontrolera. –

3

wykorzystanie debuggera:

w Gemfile dodatku:

gem 'debugger' 

następnie z terminalu:

> bundle 
> rails s --debugger 

w akcji kontrolera jesteś uderzenie:

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

a następnie skieruj przeglądarkę na: http://localhost:3000/widgets, strona nie zakończy ładowania. Wróć do terminala, na którym działa twój serwer, a będziesz w interaktywnej sesji debugowania, w której możesz uruchomić: my_method

+0

Naprawdę zapomniałem o debugowaniu. Zauważ, że nie uzyskasz dostępu do metody uruchamiania serwera w ten sposób. Musisz: rails s --debugger.I nawet w takim przypadku jedyną odpowiedzią jaką otrzymasz jest "Po prostu naciśnij metodę ApplicationController" ... brak rzeczywistego wyjścia – Daniel

+0

Myślałem o --debugger, kiedy poszedłem spać, Słuszna uwaga. Nie jestem pewien, czy rozumiem drugie zdanie w twoim komentarzu. –

+0

Cóż, próbowałem odtworzyć sprawę, którą Martin ustanowił dla nas, ale otrzymałem wiadomość ... To znaczy, nie mogę sprawdzić, co się dzieje w metodzie, kiedy ją nazywam. Mogę jednak coś zrobić źle ... – Daniel

0

Nie jest to dokładnie pytanie zadane, ale można również debugować przy pomocy klejnotu pry, podobnie jak debugger.

Dodaj do Gemfile:

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

W swojej metodzie:

def myMethod 
    binding.pry 
    # some code 
end 

Gotowe!

Po uruchomieniu metody przetwarzanie strony zostanie zamrożone pod numerem binding.pry, a pry przejmie monit. Wpisz n dla każdego nowego kroku metody i baw się ze zmiennymi, które można wydrukować (po prostu wpisując je) w "czasie rzeczywistym"!

Powiązane problemy