Rails

2012-05-20 20 views
10

konsolunda bir ApplicationController yönteminin çağrılması Raylarda, dosyanın zaten yüklü olduğunu varsayarak, bu örnekten konsoldan my_method nasıl aranabiliyor?Rails

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

Bu aslında kulağa ilginç geliyor. Ama benim ilk düşüncem, denetleyicideki tüm yöntemlerin görüşlere erişmesidir.Konsola eriştiğinizde, ActiveRecord'a erişir ve modelinize ve yöntemlerine erişirsiniz. Dediğim gibi, bu benim ilk düşüncem olur. – Daniel

+0

http://stackoverflow.com/q/151030/2355112 aynı konuyla ilgili gerçekten iyi cevaplar verdi. – oozzal

cevap

27

Bunu yapmanın bir diğer çok basit yolu, ApplicationController'un kendi örneğini kullanmaktır. Aşağıdaki

>> ApplicationController.new.example 

Bu irade çıktı:

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

Sonra konsolunda, aşağıdakileri yapabilirsiniz

O HAI 

Bu, elbette, erişime sahip değil kısıtlama var request nesnesinin kendisi gibi normal bir isteğin her şeyine.

Bu senin için çok geç muhtemeldir: Bu gerekiyorsa Patrick Klingemann önerildiği gibi, hata ayıklayıcı kullanabilirsiniz ... Ben şahsen kullanarak Pry tavsiye ama umarım gelecekte birilerine yardım eder.

+1

Çok iyi çözümler, Yazma görünümü ve denetleyici test durumları için Yardım. –

3

kullanım ayıklayıcı: En Gemfile eklenti içinde

: terminalinden sonra

gem 'debugger' 

:

> bundle 
> rails s --debugger 

denetleyici eylem Eğer vuruyorlar:

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

, ardından tarayıcınızı şu adrese yönlendirin: http://localhost:3000/widgets, sayfa yüklenmeyi tamamlamıyor. Sunucunuzun çalıştığı terminale dönün ve aşağıdakileri çalıştırabileceğiniz etkileşimli bir hata ayıklama oturumunda olacaksınız: my_method

+0

Aslında hata ayıklamayı unuttum. Sunucunuzu bu şekilde başlatan yönteme erişemeyeceğinizi unutmayın. Gerekir: Raylar s --debugger.Ve bu durumda bile tek cevap "Sadece bir ApplicationController yöntemi vuruldu" ... gerçek çıkış yok – Daniel

+0

Ben uykuya gittim --debugger düşündüm iyi bir nokta. Yorumunuzdaki ikinci cümleyi anladığımdan emin değilim. –

+0

peki Martin'in bizim için kurduğu davayı yeniden üretmeye çalıştım ama aldığım şey bu mesaj… Yani, dediğimde yöntemin içinde neler olup bittiğini kontrol edemiyorum. Yanlış bir şeyler yapıyor olabilirim .. – Daniel

0

Tam olarak sorulan soru değil, aynı zamanda gemiyle de benzer şekilde debugger numaralı makalede hata ayıklayabilirsiniz. Gemfile için

ekleme: yöntemde

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

:

def myMethod 
    binding.pry 
    # some code 
end 

Bitti!

Yönteminizi çalıştırdığınızda, sayfa işlemesi binding.pry'da donacak ve göz atma işlemi komut istemini ele alacaktır. Metodun her yeni adımı için n yazın ve "gerçek zamanlı" olarak yazdırılabilen değişkenler ile oynayın (sadece yazarak)!