我有一个response_to format.js的控制器,但是,大多数请求都假设旧的format.html仍然存在并抛出404异常。如何捕获控制器上的所有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 :(得分: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通常保留用于服务器错误,如崩溃,堆栈转储等)
答案 1 :(得分:2)
您可以插入一个永久重定向到您的format.html并使用您想要的格式将其循环回控制器。这是您将RSS源重定向到原子源的方式,或者您可能有多种输入格式但只有一种输出格式的方式
respond_to do |format|
...
format.js { do whatever }
...
format.html { redirect_to path_back_here(:format => :js) }
用你正在使用的路径替换path_back_here(search_path?)