2011-02-22 2 views
8

레일스 동적 파인더가 결과를 찾을 수 없을 때 nil을 반환하지 않고 ActiveRecord::RecordNotFound 예외를 던지도록 강제 할 수 있습니까?RecordNotFound 예외를 던지기 위해 Force Rails 3 동적 파인더를 사용 하시겠습니까?

@not_found = Beverage.find_by_name('Nuka–Cola') 

을 오히려

@not_found == nil 

수 있었

.find_by_name('Nuka–Cola') 

메소드 호출을 갖는보다 : 이름 'Nuka 콜라'의 음료가 존재하지 않는 예를 들어

ActiveRecord::RecordNotFound 예외가 발생 했습니까?

아니면 nil을 확인하고 예외를 수동으로 throw해야합니까?

답변

20

강타 버전을 사용하십시오. 일부 REST API를 거즈에서 작업하는 경우

모습

@not_found = Beverage.find_by_name!('Nuka–Cola') 
+0

굉장, 고마워! – stephenallred

+0

간단하고 정확하게 ActiveRecord가 그러한 기능을 구현할 것으로 기대했던 것과 똑같습니다. – John

-2

고마워요, 그것은 더 유용 할 것이다. HTML 예외 페이지를 표시하는 대신 의미있는 JSON 또는 XML을 렌더링하십시오.

class ApiController < ApplicationController 
rescue_from ActiveRecord::RecordNotFound, :with => :not_found 

    def not_found(exception = nil) 
    render :json => { :message => exception.message, :request => request.fullpath }, 
         :status => 404 
    end 
end  
관련 문제