【问题标题】:rails routing and params with a '.' in them带有'.'的rails路由和参数在他们之中
【发布时间】:2011-11-08 17:17:25
【问题描述】:

我正在使用 Rails 来保护对仅需要为 Web 应用程序的某些用户提供服务的文件的访问。为此,我有一个控制器方法,它接受有关他们想要访问的文件的信息,检查他们的授权,然后如果他们被授权,则使用 x-sendfile 将其发送给他们。这个概念很好用,除了一个障碍:如果他们请求一个带有 .在其中我的路由不知道如何处理它。在我的路线文件中,我有:

match 'atb_resources/:guid/:resource'  => 'atb_resources#show', :as => :get_atb_resource, :via => :get

但是如果我在我的规范中尝试这个:

get 'show', :guid => 'some_guid', :resource => 'blah.txt'

规范失败并显示:

Failure/Error: get 'show', :guid => @atb.guid, :resource => 'blah.txt'
 ActionController::RoutingError:
   No route matches {:guid=>"ABCDEFG5", :resource=>"blah.txt", :controller=>"atb_resources", :action=>"show"}

但这很好:

get 'show', :guid => 'some_guid', :resource => 'blahDOTtxt'

我假设问题出在我的路线上,但我并不真正了解周期如何影响路线。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails routing rspec


    【解决方案1】:

    对于 Rails 3,您可以将其添加到您的路线中:

    :constraints => { :resource => /.*/ }
    

    对于 Rails 2 (AFAIK):

    :requirements => { :resource => /.*/ }
    

    Rails 将尝试将 .txt 解释为没有其中之一的格式说明符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 2017-03-22
      • 1970-01-01
      • 2011-05-15
      • 2019-03-21
      • 2020-12-20
      • 2015-06-12
      相关资源
      最近更新 更多