2012-04-04 2 views
0

예외적으로 캐싱을 방지하려면 어떻게합니까? 발견 캐시 ActionRecord :: RecordNotFound 아무것도와 충돌하는 경우Ruby on Rails에서 예외시 캐싱 방지

caches_page :index 
... 
def index 
    if params[:city] 
    city = City.find(params[:city]) 
    @shows = city.shows 
    else 
    @shows = Show.all 
    end 
... 

- 괜찮아요 : 나는이 작업을해야합니다. 하지만 나는 내 로그 파일에도이 예외를 원하지 않는다. 하지만 만약 내가 :

begin 
    city = City.find(params[:city]) 
    rescue ActiveRecord::RecordNotFound 
    render :nothing => true 
    return 
    end 

캐시 된 빈 페이지!

내가 이런 상황에서해야 할 일은 무엇입니까?

답변

0

시도 :

caches_page :index, :if => :city_exists? 

private 

def city_exists 
    city = City.find(params[:city]) 
    !city.nil? ? true : false 
end 

그리고 난 당신이 액션 캐싱 또는 단편 캐싱를 사용할 수 있다고 생각합니다.

Extending Caching에 대해 자세히 살펴보십시오.

+0

도시에 대한 프로그램이있는 json 페이지를 캐시합니다. 페이지 캐싱이 최선의 선택이라고 생각합니다. (아마도 방금 레일을 배우기 시작했습니다.) 그러나 당신의 솔루션은 도시에 대한 하나의 추가 데이터베이스 요청을 필요로합니다. (제 컨트롤러에서 필요합니다) - 다른 옵션이 있습니다 ... – Donotello

+1

희망합니다. 조각 캐싱을 사용하도록 제안하십시오. http://broadcastingadam.com/2011/05/advanced_caching_in_rails에서보세요. – Vik