代码
respond_to do |format|
format.html
format.json { render :json => @switches }
format.xml { render :xml => @switches.to_xml }
format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." }
end
以上内容适用于Rails 2.2.2。但是在Rails 3中,在浏览器上获取controller / index.html或索引都将落入最后一行:“目前仅支持HTML和JSON格式。”
我能找到的唯一Rails文档是
当前只说明:
respond_to :html, :xml, :json
但它们需要单独的json和xml模板,并且无法处理“目前仅支持HTML和JSON格式”的情况。
答案 0 :(得分:43)
在rails3中你会写:
respond_with(@switches) do |format|
format.html
format.json { render :json => @switches }
format.xml { render :xml => @switches }
format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." }
end
但这仅适用于文件顶部的respond_to
块,详细说明了预期的格式。 E.g。
respond_to :xml, :json, :html
即使在这种情况下,如果有人例如询问js
格式,则会触发any
块。
您还可以单独使用respond_to
,如下所示:
@switches = ...
respond_to do |format|
format.html {render :text => 'This is html'}
format.xml {render :xml => @switches}
format.json {render :json => @switches}
format.all {render :text => "Only HTML, JSON and XML are currently supported"}
end
希望这有帮助。
答案 1 :(得分:3)
你可能会发现看这一段railscasts很有用,它说明了Rails 3中控制器的变化,特别是对响应者类的更改(将respond_to置于控制器类本身,并且仅在动作中使用respond_with @object) ):
答案 2 :(得分:0)
以下适用于我。我相信你必须明确指定html的“render”部分,否则它将使用format.any。
respond_to do |format|
format.html { render :html => @switches }
format.json { render :json => @switches }
format.xml { render :xml => @switches }
format.all { render :text => "we only have html, json, and xml" }
end