在Rails中路由资源时,可选的format属性会自动附加到生成的路由。这样就可以将请求的资源作为XML,HTML等请求。实际允许的格式通常在控制器中使用respond_to
进行描述。如何限制Rails路由文件中的资源格式
但在很多情况下,您只需要支持HTML,并且感觉在每个控制器的每个操作中都会写入respond_to :html
开销。因此,当在routes.rb文件中构建路由时,如果有方法限制允许的内容类型,则会很酷,例如,
map.resources :users, :formats => :html
map.resources :users, :formats => [:html, :xml]
map.resources :users, :formats => {:index => :html, :show => [:html, :xml]}
有没有办法通过本地或通过插件来实现?
P.S.解决此问题的常用方法是忽略该问题,并且不要在操作中使用respond_to
。但是这实际上并不限制允许的内容类型。相反,它只是期望在每个可能的内容类型的视图目录中存在一个模板。如果请求时不存在,系统将抛出HTTP 500错误。
不,一个500错误意味着发生了错误的服务器上。如果内容类型不受支持,则不是服务器错误 - 这是客户端错误(客户端不应该请求它)。 406将是正确的响应代码。请参阅“HTTP响应代码”:http://www.sitepoint.com/blogs/2008/02/04/restful-rails-part-i/ – 2009-09-03 16:58:47
当然,如果您打算在末尾标记.xml或.html该URL和该格式不被支持,那么你应该返回404找不到。通过为每种内容类型创建URL来忽略conneg的使用似乎有点厚颜无耻,但是当在accept头中没有有效的内容类型时窃取repsonse代码! – 2009-09-03 18:31:34
好吧,你可能有一点 - 即使这实际上Rails是如何工作的。但是,这不是我的问题的重点。我仍然想在一个中心位置(最好是路由文件)中指定它 - 无论如何404或406返回错误 – 2009-09-03 18:47:09