【问题标题】:respond_to only format.js for all mime typesrespond_to 仅适用于所有 mime 类型的 format.js
【发布时间】:2011-08-14 10:33:08
【问题描述】:

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

【问题讨论】:

  • format.all { ... } 有什么问题?

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


【解决方案1】:

如果所有请求都应该是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 并使用您想要的格式将其循环回控制器。这是您将 RSS 提要重定向到 atom 提要或您可能有多种输入格式但只有一种输出格式的方式的方式

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

    将 path_back_here 替换为您正在使用的任何路径 (search_path?)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多