ruby-on-rails – 如何限制Rails路由文件中的资源格式
发布时间:2020-12-16 20:10:49 所属栏目:百科 来源:网络整理
导读:当在Rails中路由资源时,可选格式属性将自动附加到生成的路由.这样就可以将所讨论的资源请求为 XML,HTML等.实际允许的格式通常在控制器中使用respond_to进行描述. 但是在许多情况下,您只需要支持HTML,并且在每个控制器的每个动作中写入respond_to:html就像一
当在Rails中路由资源时,可选格式属性将自动附加到生成的路由.这样就可以将所讨论的资源请求为
XML,HTML等.实际允许的格式通常在控制器中使用respond_to进行描述.
但是在许多情况下,您只需要支持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]} 有没有办法通过本机或通过插件来实现? 附:解决这个问题的通常方法是忽略这个问题,不要在actions中使用respond_to.但这实际上并不限制允许的内容类型.相反,它只是期望在每个可能的内容类型的views目录中存在一个模板.如果请求不存在,则系统将引发HTTP 500错误. 解决方法
由于Rails使用等价于通配符来处理格式“.:format”,所以在路由方面阻止某些事情有点困难.
而不是这样,在前一个过滤器中捕获任何非HTML请求是非常简单的方法.这可能是一种方式: class ApplicationController < ActionController::Base before_filter :check_format private def check_format if request.format != Mime::HTML raise ActionController::RoutingError,"Format #{params[:format].inspect} not supported for #{request.path.inspect}" end end end ActionController :: RoutingErrors被处理为404错误,这是明智的. skip_before_filter :check_format,:only => ACTION_NAME (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |