2011-08-14 1 views
4

나는 respond_to format.js 컨트롤러를 가지고 있지만 대부분의 요청은 이전 format.html이 여전히 존재한다고 가정하고 404 예외를 throw합니다. 컨트롤러에서 MIME 요청을 모두 캡처하여 format.js로만 리디렉션하는 방법은 무엇입니까?respond_to 모든 MIME 유형에 대해 format.js

는 여기에 내가 (그냥 시연이가 잘못 알고), 이런 식으로 뭔가를 할 노력하고있어 현재의 컨트롤러 액션을

def search 
    respond_to do |format| 
    unless @search.nil? 
     format.js { render :partial => '/search/search_form', :status => 200 } 
    else 
     format.js { render :partial => '/search/not_exist', :status => 500 } 
    end 
    end 
end 

을합니다.

def search 
    respond_to(:html) do |format| 
    unless @search.nil? 
     format.js { render :partial => '/search/search_form', :status => 200 } 
    else 
     format.js { render :partial => '/search/not_exist', :status => 500 } 
    end 
    end 
end 
+0

format.all {...}의 문제점은 무엇입니까? – tokland

답변

3

모든 요청은 JS를해야하는 경우, 단지 전체 respond_to 구조 꺼내 :

def search 
    unless @search.nil? 
    render :partial => '/search/search_form', :status => 200 
    else 
    render :partial => '/search/not_exist', :status => 422 
    end 
end 

(참고 :. 422 개의 처리 기관에 변경이 제출과 의미 론적 문제를 나타내는 500은 일반적으로 예약되어 있습니다 서버 오류의 경우 충돌, 스택 덤프 등)

2

영구적 인 리디렉션을 format.html에 연결하고 원하는 형식으로 컨트롤러에 다시 연결할 수 있습니다. 이는 리디렉션 할 방법, 말, 여러 입력 형식을 가질 수있는 Atom 피드 또는 무언가에 대한 RSS 피드,하지만 당신이 사용하는 어떤 경로로 path_back_here 교체 하나의 출력 형식

respond_to do |format| 
... 
format.js { do whatever } 
... 
format.html { redirect_to path_back_here(:format => :js) } 

(search_path의입니다 ?)