2012-08-10 4 views
8

내 모델 중 하나에서 유효성 검사에 실패한 Ruby on Rails 애플리케이션이 있습니다. 이 유효성 검증이 실패 할 수있는 코드 기반에는 다른 진입 점이 있습니다. 나는 그것이 어디에서 왔는지 알아내는 데 관심이 있습니다. 그것은 간단한 검증 방법이기 때문에 어떤 예외도 발생하지 않고 메서드에서 false를 반환하고 저장에 실패합니다.루비가 예외없이 백 트레이스를 얻습니다.

현재 유효성 검사가 시작된 서비스/경로를 파악하기 위해 백 트레이스를 기록 할 수 있습니까? 그렇다면 유효성 검사에 실패하기 위해이 개체에 대한 상태 변경 원인을 확인할 수 있습니까?

답변

15

당신은 caller() 시도 할 수 :

def foo2 
    puts caller 
end 
def foo 
    foo2 #line5 
end 
foo  #line 7 

결과 :

test.rb:5:in `foo' 
test.rb:7:in `<main>' 
1

나는 영리한 방법이 있을지 모르지만,이 일을 끝낼 것이다. 당신은 멋진 작은 기능으로 그것을 감쌀 수도 있습니다. 예외를 던지고 구출하면 성능에 영향을 미칠지는 잘 모르겠지만, 아마도 프로덕션 환경에서 이런 일을하고 싶지 않을 것입니다.

begin 
    throw 
rescue 
    puts $!.backtrace 
end 
관련 문제