我正在将Rails 2应用程序转换为Rails 3.我目前有一个控制器设置如下:

class Api::RegionsController < ApplicationController
  respond_to :xml, :json
end

使用和执行如下操作:

def index
  @regions = Region.all

  respond_with @regions  
end

实现非常简单,api/区域,api/区域.xml和api/区域.json都会像您所期望的那样响应.问题是,默认情况下,我希望api/regions通过XML进行响应.我有一些消费者希望得到XML响应,我不想让他们更改所有URL以包含.xml,除非绝对必要.

在Rails 2中,您可以通过这样做来实现:

respond_to do |format|
  format.xml { render :xml => @region.to_xml }
  format.json { render :json => @region.to_json }
end

但在Rails 3中,我找不到将其默认为XML响应的方法.有什么 idea 吗?

推荐答案

如果我理解您试图做什么,您可能可以通过将默认资源格式设置为XML来解决这个问题.这将允许用户使用"api/regions"发出请求,并将响应默认为XML.请查看"控制器名称空间和路由"以及"定义默认值"部分:

http://guides.rubyonrails.org/routing.html

您可以在routes中执行以下操作.rb:

namespace "api" do
  resources :regions, :defaults => { :format => 'xml' }
end

然后,您应该能够对控制器方法进行以下工作:

class Api::RegionsController < ApplicationController
  respond_to :xml, :json

  def index 
    respond_with(@regions = Region.all)
  end
end

Ruby-on-rails相关问答推荐

Rails 7.1解决冲突的Zeitwerk Inflection规则

错误AESGCMOpen获取密码:消息身份验证失败:Golang解密GCM

在Ruby中按特定值合并时,将两个对象数组添加到一起

关于关联 has_many 的多级/三重嵌套形式

将参数传递给视图中的嵌入操作时遇到问题

has_many 通过大小验证

Ruby on Rails/Activerecord 排序自引用查询?

Rails 7 共享刺激控制器功能

Factory Girl + Mongoid 在fixture 中嵌入文档

禁用冻结字符串文字注释判断

如何使用 Capistrano gem 为生产数据库 seeder ?

价格字段的字符串、小数或浮点数据类型?

默认情况下,如何在 Rails 中使 cookie 安全(仅限 https)?

如何在不删除项目本身的情况下删除单个 HABTM 关联项目?

如何在 Rails 1.2.3 中使复选框默认为选中?

在 ruby​​ 中构建公钥时,是什么导致既不是 PUB key 也不是 PRIV key::nested asn1 错误?

Rails 3.0 中的 f.error_messages

rake db:回滚不起作用?

Rails 3:乘客找不到Bundle 程序安装的 git gem

如何在不触及 updated_at 属性的情况下更新单个属性?