为什么我的网址路由通配失败?

时间:2017-04-14 18:38:10

标签: ruby-on-rails

我无法按照导轨指南中的定义在routes.rb中填充网址。

get 'photos/*other', to: 'photos#unknown'

我在routes.rb文件中有这行代码:

 constraints(Codeopenhub) do
   get '/', to: 'codeopenhub#index'
 end

截至目前,此代码将捕获网址code.openhub.net,但我需要抓住看起来像code.openhub.net/other_stuff的网址。这是我尝试过的:

 constraints(Codeopenhub) do
   get '/*', to: 'codeopenhub#index'
 end

这不起作用.....它会抛出404.我接着尝试了这个:

constraints(Codeopenhub) do
   match '/*', to: 'codeopenhub#index', via: [:get]
 end

这也不起作用。我有一个包含此代码的lib/constraints/codeopenhub.rb文件:

class Codeopenhub
  def self.matches?(request)
    request.subdomain.include?(ENV['CODE_SUBDOMAIN'])
  end
end

基本上这就是说,如果网址包含子域名code,那么它应该转到codeopenhub#index。我很困惑为什么我的路线不匹配。为什么code.openhub.net/foo*不匹配的网址?

2 个答案:

答案 0 :(得分:0)

根据指南,我相信你需要在星上附上一个名字,因为匹配的值会被放入参数中。试试这条路线:

get '*foo', to: 'codeopenhub#index'

然后,您可以将code.openhub.net/taco路由到codeopenhub#index,例如值params[:foo] = 'taco'

答案 1 :(得分:0)

你想要的是一个可选参数。每当我需要它时,我将param名称放在括号内,所以我会这样写:

 constraints(Codeopenhub) do
   get '/(:other)', to: 'codeopenhub#index'
 end

请参阅文档中的更多信息:http://guides.rubyonrails.org/routing.html#bound-parameters