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