2013-02-24 3 views
0

레일 3.2.11을 사용 중입니다. 모델의 특정 속성이 설정되지 않은 경우 비활성화하려는 작업 (표시)이 있습니다. 지금은 직접 행동이 다루고 있어요 :모델에 특정 속성이 설정된 경우에만 동작 가능

def show 
    @model = Model.find(params[:id]) 
    if [email protected] 
     raise ActionController::RoutingError.new('Something bad happened') 
    end 
end 

이 허용 아니면이 상황을 처리하는 더 좋은 방법은 무엇입니까? 사용자가 존재하지 않는 레코드에 액세스하려고 할 때와 동일한 동작을 원합니다.

답변

-1

예. 가능합니다. 개인적으로 한 줄짜리로 조건부로 작성합니다.

raise ActionController::RoutingError.new('Something bad happened') unless @model.attribute? 

:not_found 응답을 처리하기위한 다른 방법을위한 좋은 자원 this question이다.

0

나는 before_filter 에 그 논리를 사용하는 것을 선호하므로 show 액션은 깨끗합니다 :이 방법으로

before_filter :check_attribute 

... 

def show 
    # you can use straight @model here 

end 
... 

private 

def check_attribute 
    @model = Model.find(params[:id]) 
    if [email protected] 
    raise ActionController::RoutingError.new('Something bad happened') 
    end 
end 

당신은 다른 작업을 위해도 사용할 수 있습니다.

+1

나는 "before_filter"를 의미한다고 생각한다. – mockaroodev

+1

또한이 필터가 'before_filter : check_attribute, : only :> : show' 필터에서'only' 또는'except' 옵션을 사용하는 방법을 제한 할 수 있습니다. –

관련 문제