对所有mime类型只响应format.js

时间:2011-08-14 10:33:08

标签: ruby ruby-on-rails-3 controller ruby-on-rails-3.1

我有一个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

2 个答案:

答案 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?)