2011-08-14 15 views
4

我有一個控制器的respond_to format.js,但是,大多數請求假設舊的format.html仍然存在,並引發404例外。如何捕獲控制器上的所有MIME請求並將其重定向到format.js?respond_to只format.js所有的MIME類型

這裏的電流控制動作

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並使用您想要的格式將其循環回控制器。這是,你會重定向SEARCH_PATH的樣子,說,一個RSS feed到一個原子飼料什麼的,你可能有多個輸入格式,但只有一個輸出格式

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

與任何道路使用的是更換path_back_here( ?)