1

ルート制約を 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

制約も出力に表示されません...

私は何を間違っていますか?

4

1 に答える 1

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
于 2014-06-12T16:41:10.580 に答える