2012-05-20 8 views
10

레일스에서 ​​파일이 이미로드되었다고 가정하면 콘솔에서이 예제로 my_method을 어떻게 호출 할 수 있습니까?레일에서 콘솔로 ApplicationController 메소드 호출하기

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

실제로 흥미로운 것 같습니다.하지만 내 생각은 컨트롤러 내부의 모든 메소드가 뷰에 의해 액세스된다는 것입니다.콘솔에 액세스하면 ActiveRecord에 액세스하여 모델 및 메서드에 액세스 할 수 있습니다. 내가 말했듯이 이것이 내 생각 일 것입니다. – Daniel

+0

http://stackoverflow.com/q/151030/2355112에는 동일한 문제에 관한 정말 좋은 답변이 있습니다. – oozzal

답변

27

또 다른 매우 간단한 방법은 ApplicationController 인스턴스를 사용하는 것입니다. 다음

>> ApplicationController.new.example 

이 출력됩니다 :

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

그런 다음 콘솔에서, 당신은 다음과 같은 작업을 수행 할 수

O HAI 

이를, 물론, 액세스를 필요가 없다는 제한이 request 객체 자체와 같이 정상적인 요청 일 것입니다.

이 당신을 위해 너무 늦은 것입니다 :이 필요한 경우 패트릭 Klingemann 제안으로, 디버거를 사용할 수 ... 나는 개인적으로 사용 올립니다 추천 , 그러나 희망을 갖고 그것은 미래에 누군가를 도울 것입니다.

+1

아주 좋은 솔루션,보기 작성 도움말 및 컨트롤러 테스트 케이스. –

3

사용 디버거 : 당신의 Gemfile 추가에

: 터미널에서 다음

gem 'debugger' 

:

> bundle 
> rails s --debugger 

컨트롤러 액션에서 당신이 타격있어 :

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

브라우저를 가리켜 : http://localhost:3000/widgets, 페이지로드가 완료되지 않습니다. 서버가 실행중인 터미널로 돌아가서 다음을 실행할 수있는 대화 형 디버깅 세션에있게됩니다. my_method

+0

사실 저는 디버깅을 잊어 버렸습니다. 그런 식으로 서버를 시작하는 메소드에 액세스 할 수는 없습니다. 당신은 레일즈 --debugger를 필요로 할 것입니다. 그리고 그 경우조차도 당신이 얻는 유일한 응답은 "그냥 ApplicationController 메소드를 쳤습니다"입니다 ... 실제 출력이 없습니다 – Daniel

+0

제가 잠들었을 때 --debugger를 생각했습니다. 좋은 지적. 나는 당신의 코멘트에서 두 번째 문장을 이해하는지 모르겠습니다. –

+0

글쎄, 마틴이 우리를 위해 준비한 케이스를 재현 해 보았습니다.하지만 내가 얻은 것은 그 메시지입니다 ... 나는 그것을 호출 할 때 실제로 어떻게 내부에서 진행되고 있는지를 확인할 수 없다는 것을 의미합니다. 나는 뭔가 잘못하고있을 수도 있습니다. – Daniel

0

정확히 묻는 질문이 아니지만 debugger과 마찬가지로 pry 보석을 사용하여 디버깅 할 수도 있습니다. Gemfile

추가 : 방법에

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

:

def myMethod 
    binding.pry 
    # some code 
end 

을 완료!

메서드를 실행하면 페이지 처리가 binding.pry으로 고정되고 프롬프트가 표시됩니다. 메서드의 각 단계마다 n을 입력하고 "실시간"으로 인쇄 할 수있는 변수를 가지고 놀아주세요!

관련 문제