В моем приложении Rails у меня есть путь, который выглядит так: /events/event_name
. В файле routes.rb я указываю любой путь, который соответствует /events/:id
на тот же контроллер. Однако то, что я хочу сделать, это ограничить :id
только выбором (т.е. Только marathon
и swimming
будут продолжены, а все остальное - до 404). Фактическая обработка id обрабатывается в Angular. Есть ли способ, которым я могу легко ограничить свои маршруты, не перечисляя каждый возможный выбор?
routes.rb:
get '/events/:id' => 'static_pages#event', constraints: {id:[ 'concessions', 'football']} #this doesn't work
угловой код:
app.config([
'$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
// console.log($routeProvider.$get);
$locationProvider.html5Mode({enabled: true, requireBase: false});
$routeProvider.
when('/events/:id', {
templateUrl: '../templates/eventTemp.html',
controller: 'EventsCtrl'
})
}
]);
Изменение: Чтобы уточнить, "перечисляя все возможные варианты", я имел в виду не делать что-то вроде этого:
get '/events/concessions' => 'static_pages#event'
get '/events/football' = 'static_pages#event'
Вы должны иметь возможность использовать:
get '/events/:id' => 'static_pages#event', constraints: { id: /concessions|football/ }
Этот формат принимает любое регулярное выражение, за исключением того, что вы не можете (и не должны) включать якорь. Смотрите документацию здесь для получения дополнительной информации.