Rails路由如何约束我的路由id?

时间:2015-07-15 01:39:05

标签: ruby-on-rails angularjs

在我的Rails应用中,我的路径如下:/events/event_name。在我的routes.rb文件中,我将/events/:id下匹配的任何路径指向同一个控制器。但是,我想要做的是限制:id只选择选择(即只允许marathonswimming继续,其他任何内容都会转到404)。在Angular中处理实际的id处理。有没有办法轻松约束我的路线而不必列出每一个可能的选择?

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'

1 个答案:

答案 0 :(得分:0)

你应该可以使用:

get '/events/:id' => 'static_pages#event', constraints: { id: /concessions|football/ }

此格式采用任何正则表达式,但您不能(并且不需要)包含锚点。有关详细信息,请参阅文档here