在默认路由中,request/posts/:id映射到带有:format => "html"的"show"操作.我在show action中使用了一些xhtml元素,除非:content_type设置为xml,否则无法正确呈现这些元素.我目前正在通过渲染秀来解决这个问题.xml.erb和手动设置内容类型,如下所示:

format.html { render :template => "/posts/show.xml.erb", 
             :locals => {:post => @post}, :content_type => "text/xml" }

但这似乎很愚蠢.我如何更改routes.rb,以便将/posts/:id路由为format=>"xml"?谢谢

推荐答案

Default format for requests:

可以使用默认哈希将给定路由的默认格式设置为xml.

例如:

# single match defaulting to XML (/plots/1 is the same as /plots/1.xml)
match 'posts/:id' => 'posts#show', :defaults => { :format => 'xml' }

# using resources, defaulting to XML (all action use XML by default)
resources :posts, :defaults => { :format => 'xml' }

# using resources and mixing with other options
resources :posts,
          :only => [:new, :create, :destroy],
          :defaults => { :format => 'xml' }

搜索official Ruby on Rails routing guide始终是一个好主意,它相当深入,对于任何路由问题都是一个非常好的第一站资源.

Ruby-on-rails相关问答推荐

在has_many关系中由两个条件 Select

在数组中定位不匹配的索引

如何不需要rails/all?

Rails 7 共享刺激控制器功能

如何为 I18n 设置 raise_on_missing_translations

错误 NoMethodError:ActionView::Base:Class 的未定义方法 `debug_rjs='

rails s和bundle exec rails s有什么区别?

有没有办法在 Rails 3.1 中检测用户代理

如何在 Rails 中使用 instance_eval 子句删除验证?

跳过模型中的某些验证方法

rails:防止闪烁消息显示两次

什么是 Ruby 中的 Python 文档字符串?

在两个 DateTime 之间迭代,步长为一小时

Ruby on Rails:有条件地显示部分

可以在 Rails/ActiveRecord 中使用 NULL 指定唯一索引吗?

Rspec - Rails - 如何遵循重定向

在 Rails 路由中更改 id 参数

以最Ruby 风格计算 ActiveSupport:TimeWithZone 天数的差异?

保存用户偏好的最佳方法?

何时在 Ruby on Rails 中使用 lambda?