在Rails 3中,respond_to和format.all的工作方式与Rails 2不同?

nop*_*ole 24 mime ruby-on-rails ruby-on-rails-3

代码

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
Run Code Online (Sandbox Code Playgroud)

以上内容适用于Rails 2.2.2.但是在Rails 3中,在浏览器上获取控制器/ index.html或索引都将落入最后一行:"目前仅支持HTML和JSON格式."

我能找到的唯一Rails文档是

http://api.rubyonrails.org/classes/ActionController/MimeResponds/ClassMethods.html#method-i-respond_to

目前只说:

respond_to :html, :xml, :json
Run Code Online (Sandbox Code Playgroud)

但它们需要单独的json和xml模板,并且无法处理"目前仅支持HTML和JSON格式"的情况.

nat*_*vda 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
Run Code Online (Sandbox Code Playgroud)

但这仅适用于与respond_to文件顶部的块对应,详细说明了预期的格式.例如

respond_to :xml, :json, :html
Run Code Online (Sandbox Code Playgroud)

即使在这种情况下,如果有人例如询问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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


svi*_*env 3

您可能会发现观看这一集的railscasts很有用,它说明了Rails 3中控制器的更改,特别是响应者类的更改(将respond_to放在控制器类本身中,并且仅在操作中使用respond_with @object):

http://railscasts.com/episodes/224-controllers-in-rails-3