Ruby on rails 自定义布线约束在Rails 4中不起作用

Ruby on rails 自定义布线约束在Rails 4中不起作用,ruby-on-rails,routes,constraints,subdomain,Ruby On Rails,Routes,Constraints,Subdomain,我无法使我的路线约束在Rails 4中工作。这是我的路由文件: Catapult::Application.routes.draw do constraints Subdomain do resources :contacts do member do get 'delete' end end end end 下面是子域约束: class Subdomain def self.matches?(request) p r

我无法使我的路线约束在Rails 4中工作。这是我的路由文件:

Catapult::Application.routes.draw do
  constraints Subdomain do
    resources :contacts do
      member do
        get 'delete'
      end
    end
  end
end
下面是子域约束:

class Subdomain
  def self.matches?(request)
    p request.subdomains.first # This never appears in the logs
    request.subdomains.first !~ /www|catapultcentral|customercube|lvh/
  end
end
如上代码所述,
p
语句的输出从未出现在日志和 约束似乎从未被应用。这是rake路由的输出:

        Prefix Verb   URI Pattern                    Controller#Action
delete_contact GET    /contacts/:id/delete(.:format) contacts#delete
      contacts GET    /contacts(.:format)            contacts#index
               POST   /contacts(.:format)            contacts#create
   new_contact GET    /contacts/new(.:format)        contacts#new
  edit_contact GET    /contacts/:id/edit(.:format)   contacts#edit
       contact GET    /contacts/:id(.:format)        contacts#show
               PATCH  /contacts/:id(.:format)        contacts#update
               PUT    /contacts/:id(.:format)        contacts#update
               DELETE /contacts/:id(.:format)        contacts#destroy
约束也不会出现在输出中


请问我做错了什么?

我认为您可能需要使用约束类的实例,您必须调用Subdomain.new:

Catapult::Application.routes.draw do
  constraints Subdomain.new do
    resources :contacts do
      member do
        get 'delete'
      end
    end
  end
end
这意味着
匹配?
不应该是类方法,而应该是实例方法:

class Subdomain
  def matches?(request)
    request.subdomains.first !~ /www|catapultcentral|customercube|lvh/
  end
end