Problem z routes

Chciałbym sobie ładnie napisać routes, które ostatecznie dawały by mi coś w ten deseń:

    Prefix Verb     URI Pattern                                     Controller#Action
   v1_mail_domains  GET    /v1/mail/domains(.:format)               v1/mail/domains#index
                    POST   /v1/mail/domains(.:format)               v1/mail/domains#create
   v1_mail          GET    /v1/mail/domains(/:name)(/:id)(.:format) v1/mail/domains#show {:id=>/[0-9]+/, :name=>/[a-z0-9]+\.[a-z0-9\/\.]+/i}
                    DELETE /v1/mail/domains(/:name)(/:id)(.:format) v1/mail/domains#destroy {:id=>/[0-9]+/, :name=>/[a-z0-9]+\.[a-z0-9\/\.]+/i}

Jak na razie zrobiłem to w ten sposób:

           namespace :v1 do
                namespace :mail do
                  constraints(
                      id: /[0-9]+/,
                      name: /[a-z0-9]+\.[a-z0-9\/\.]+/i,
                  ) do
                    resources :domains, except: [:update, :show, :destroy]
                    get     '/domains(/:name)(/:id)' => 'domains#show'
                    delete  '/domains(/:name)(/:id)' => 'domains#destroy'
                  end
                end
              end

ale zastanawiam się, czy przy tworzeniu resources nie można już jakoś określić nazwy parametrów alternatywnych. Jak na razie znalazłem tylko jak zmienić :id na jakąś inną nazwę.

Możesz zrobić coś takiego: resources :domain, constraints: { id: /.*/ }, dostosuj do swoich potrzeb.

Tak, ale sama definicja constraints określi tylko regexpa dla danej zmiennej. Po tym i tak muszę jeszcze jakoś zadeklarować jakie zmienne będą użyte. Rozumiem, że mógł bym też zdefiniować constaint który pod :id będzie łapać zarówno to co u mnie mieściło się w dotychczasowej definicji id jak i to co miało trafiać do zmiennej name, ale… musiał bym chyba później w kontrolerze identyfikować czym oryginalnie miała być przekazana wartość. Generalnie wiem jak to zrobić, ale czy to jest sposób w jaki powinno się ten problem rozwiązywać?