Rails 3: облегчение чтения и исправления универсального маршрута

Я пытаюсь написать всеобъемлющий маршрут в Rails 3, но хочу зарезервировать некоторые термины в этом. Я специально следую примеру, приведенному в этом посте, в ответе Дэвида Берроуза: Динамические маршруты с Rails 3

Я использую следующий синтаксис:

match '*path' => 'router#routing', :constraints => lambda{|req|  (req.env["REQUEST_PATH"] =~ /(users|my-stuff)/).nil? }

Теперь этот синтаксис работает отлично - если пользователь заходит на страницу с "user" или "my-stuff" в пути, он попадает в уловку и переходит в определенное место. Если пользователь переходит на любой другой URL-адрес, он переходит к моей логике маршрутизации.

Мой вопрос больше о удобочитаемости - есть ли способ сопоставить маршрут с чем-то другим , кроме регулярного выражения? Есть ли способ предоставить массив терминов для сопоставления? Кроме того, есть ли способ сопоставить определенные сегменты маршрута, а не все?

Очевидно, что Rails имеет встроенную маршрутизацию, но этот проект требует, чтобы для определенных маршрутов контроллер не присутствовал в URL. Следовательно, все.

Спасибо за любую помощь.

Вот обновленный файл маршрутов согласно ответу ниже:

class RouteConstraint
  RESERVED_ROUTES = ['users', 'my-stuff']

  def matches?(request)
    !RESERVED_ROUTES.map {|r| request.path.include?(r)}.empty?
  end
end

App::Application.routes.draw do
  resources :categories
  resources :sites

  match '*path' => 'router#routing', :constraints => RouteConstraint.new

  devise_for :users, :path_names =>{ :sign_in => 'login', :sign_out => 'logout', :registration => 'register' }
  root :to => "router#routing"
end

5
задан Community 23 May 2017 в 12:29
поделиться