2013-07-28 2 views
1

Я не могу управлять, чтобы сделать свой маршрут ограничение на работу в Rails 4. Вот мои маршруты файл:Пользовательские маршрут ограничение не работает в 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 routes:

 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 

Ограничение не появляется на выходе либо ...

Что я делаю не так, пожалуйста?

ответ

0

Я думаю, что вам, возможно, придется использовать экземпляр вашего класса ограничений, вы должны вызвать Subdomain.new:

Catapult::Application.routes.draw do 
    constraints Subdomain.new do 
    resources :contacts do 
     member do 
     get 'delete' 
     end 
    end 
    end 
end 

Это означает, что matches? не должен быть классом-метод, но экземпляр-метод :

class Subdomain 
    def matches?(request) 
    request.subdomains.first !~ /www|catapultcentral|customercube|lvh/ 
    end 
end 
Смежные вопросы