У меня есть RESTful-настройка для маршрутов в приложении Rails с использованием текстовых постоянных ссылок в качестве идентификатора ресурсов.
Кроме того, есть несколько специальных именованных маршрутов, которые пересекаются с именованным ресурсом, например ::100100
# bunch of special URLs for one off views to be exposed, not RESTful
map.connect '/products/specials', :controller => 'products', :action => 'specials'
map.connect '/products/new-in-stock', :controller => 'products', :action => 'new_in_stock'
# the real resource where the products are exposed at
map.resources :products
Модель Product
использует permalink_fu для генерации постоянных ссылок на основе имени, а ProductsController
выполняет поиск в поле постоянных ссылок при доступе. Это все отлично работает.
Однако при создании новых Product
записей в базе данных я хочу проверить, что сгенерированная постоянная ссылка не пересекается со специальным URL.
Если пользователь пытается создать продукт с именем specials
или new-in-stock
или даже обычный метод ресурсов RESTful Rails, такой как new
или edit
, я хочу, чтобы контроллер просматривал конфигурацию маршрутизации, устанавливал ошибки на объект модели, не пройдена валидация для новой записи и не сохранена.
Я мог бы жестко закодировать список известных нелегальных имен постоянных ссылок, но мне кажется, что делать это таким образом сложно. Я бы предпочел подключиться к маршрутизации, чтобы сделать это автоматически.
(имена контроллеров и моделей изменены, чтобы защитить невинных и упростить ответ; фактическая настройка сложнее, чем в этом примере)