Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在控制器';你对此有何反应? 环境 轨道3.2.6 Ruby 1.9.3p194 我发现了什么 遭遇_Ruby On Rails_Ruby_Controller_Format_Mime - Fatal编程技术网

Ruby on rails 如何在控制器';你对此有何反应? 环境 轨道3.2.6 Ruby 1.9.3p194 我发现了什么 遭遇

Ruby on rails 如何在控制器';你对此有何反应? 环境 轨道3.2.6 Ruby 1.9.3p194 我发现了什么 遭遇,ruby-on-rails,ruby,controller,format,mime,Ruby On Rails,Ruby,Controller,Format,Mime,当扩展名为json时,我想运行render:json=>@theme,否则,呈现show.html.erb页面,因此我更改了代码: respond_to do |format| format.json { render :json => @theme} format.any {render} end 当URL扩展名为.json时,它将正确运行render:json=>@theme,并在.xml、.html等中呈现show.html.erb 但是,我在.xxx,.ooo,中得到了4

当扩展名为
json
时,我想运行
render:json=>@theme
,否则,呈现
show.html.erb
页面,因此我更改了代码:

respond_to do |format|
  format.json { render :json => @theme}
  format.any {render}
end
当URL扩展名为
.json
时,它将正确运行
render:json=>@theme
,并在
.xml
.html
等中呈现
show.html.erb

但是,我在
.xxx
.ooo
中得到了
406不可接受的
,我发现这是因为只允许支持MIME类型

临时解决办法 它看起来很干净,不比
响应
样式:D差

问题:
  • 我想知道是否还有更好的解决办法
  • 如果
    case
    语句可以做所有事情
    respond\u to
    可以做而
    respond\u to
    不能做,我为什么要使用
    respond\u to

  • 非常有用的东西,就像通常发生的那样,可以在中找到

    注意这里的注意事项:注意,我们使用Mime::CSV作为CSV Mime类型,因为它与Rails一起提供。对于自定义渲染器,需要使用mime::type.register注册mime类型

    您必须将这些内容放在config/initializers/mime_types.rb中。您会发现注册非默认类型的示例很少

    预定义的类型是

    http://localhost/themes/1.json
    http://localhost/themes/1.xxx
    http://localhost/themes/1.custom_ext
    ...
    
    respond_to do |format|
      format.json { render :json => @theme}
      format.any {render}
    end
    
    class ThemesController < ApplicationController
      def show
        if params[:format].present? && params[:format] == "json"
          render :json => @theme
        end
      end
    end
    
    class ThemesController < ApplicationController
      def show
        case params[:format]
        when "json" then render :json => @theme
        when "xml" then render :xml => @theme
        ...
        else render
        end
      end
    end