加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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错误,这是明智的.
如果您确实有需要支持HTML以外的操作,请使用:

skip_before_filter :check_format,:only => ACTION_NAME

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读