2011-07-26 8 views
1

의 예외 객체 전달 솔직히 제목에 나오는 것은 불가능할 수도 있지만 더 나은 것을 만들 수는 없다는 것을 알고 있습니다.Ruby on Rails : Model

내 문제는 ActiveRecord를 사용하여 데이터를 가져 오거나 저장하는 것이 아니라 웹 서비스를 통해 전용 API를 사용하는 것입니다. 따라서 메일에서 보내는 예외를 처리해야하지만 코드에서 중복을 피하기 위해 모델에서 처리하려고합니다. 지금까지 내가 생각해 낸 유일한 아이디어는이 웹 서비스의 특정 응답에 대한 예외를 제기하여 애플리케이션 컨트롤러에서 적절한 조치를 취하는 것입니다. 불행히도 내 행동 중 하나는 오류를 생성 한 webservice의 요청과 응답이 포함 된 전자 메일을 보내는 것입니다. 질문은 컨트롤러에 어떻게 전달할 수 있습니까?

답변

0

일반적으로 프로그램 흐름을 처리하기 위해 예외를 사용하는 것은 나쁜 습관으로 간주됩니다 (그러나 아주 유용합니다! = P).

모델에서 컨트롤러로 컨트롤을 명시 적으로 전송하려고 시도하는 대신 블록을 모델로 전달하고 yield를 사용하여 해당 블록을 실행하는 방법을 설명합니다. 그런 식으로 모델이 실행되기를 원할 때 모델에서 실행중인 컨트롤러의 코드를 가질 수 있습니다. 여기

hello = "hello" 
def func 
    goodbye = "goodbye" 
    yield 
end 

func {hello = "world"} 

puts goodbye 

NameError: undefined local variable or method `goodbye' for #<Object:0x7fa85b7322a0> 
    from (irb):25 
    from :0 

puts hello 
"world" 

함수에 코드를 전달하고,이 코드 블록은 여전히 ​​헬로 == 호출자의 스택 공간 내에서 "세계"하지만,이 내부에서 실행 하였다 (발신자로부터 변수를 액세스 할 수있는 도시의 예 기능). 그것은 나에게 청결한 느낌.

작별 인사는 함수가 끝나면 함수 내에서 정의 된 변수가 스택에서 튀어 나오는 것을 보여줍니다.