新手问题 关于路由的设置

luliangshu · 2013年12月04日 · 最后由 luliangshu 回复于 2013年12月04日 · 2383 次阅读

我有如下的一些路由

get '/home' => 'static_pages#home_page'
get '/pricing' => 'static_pages#pricing'
get '/faq'  => 'static_pages#faqs'
get '/about' => 'static_pages#about_page'
get '/url' => 'static_pages#url_page'
get '/plan' => 'user_plan#plan'
get '/subscription' => 'user_plan#subscription'
get '/finish' => 'user_plan#finish'
get '/upgrade' => 'user_plan#upgrade'

然后 除了以上的之外其余的都要匹配这个规则

get '/:id' => 'nodes#userPage'

求大神帮解释下 该如何匹配。关于顺序问题 我换过位置了 依然没法弄 本来想用正则 但是 rails 的路由规则不支持"^"

@zisasign 但是他这里说了 :constraints takes regular expressions with the restriction that regexp anchors can't be used. For example, the following route will not work:

get '/:id', to: 'posts#show', constraints: {id: /^\d/}

@hlcfan 我不是要跳到 404 只是要匹配这个规则。

@luliangshu 只是说^、$两个 anchor 不能用吧,其他的还是可以的。

比如: get 'photos/:id', to: 'photos#show', constraints: { id: /[A-Z]\d{5}/ } 匹配 /photos/A12345

@zisasign 这样是可以 但后面的 url 是没有规则的 随用户修改 那如何写 匹配除了上面的这些 url 之外 这个正则。。

这种用户随便修改 url 的情况,标准处理方式应该是 404。

有时我偷懒,就 fallback 到指定页面的了,比如:

get 'reader/sites/:query' => 'reader#sites', as: 'reader_sites', constraints: QuerySiteConstraint
# fallback to index
get 'reader/sites/:query', to: redirect('/reader')
get 'reader/sites', to: redirect('/reader')

:query 符合 constraint 的话,执行第一条。否则,第二种,就是你说的用户随便改的情况,执行第二条。如果没带参数的话,第三条。

@zisasign 我是指用户改成他自己的 但是下面这些路由是我们要用的 所以他不能改成这些名字

我的路由是这样 顺序和你一样

get '/plan' => 'user_plan#plan'
get '/subscription' => 'user_plan#subscription'
get '/finish' => 'user_plan#finish'
get '/upgrade' => 'user_plan#upgrade'

get '/:id' => 'nodes#userPage'

但是当我进去/plan 的还是先到了这个 nodes#userPage 这个里面

写在最下面有什么问题?如果跑到其他 route 就是路由定义的有问题,考虑是不是合并

@dddd1919 @zisasign @hlcfan 找到了 是一个 gem 的路由有问题 我自己的路由会走这个流程。。谢谢各位

route定义太赤裸裸了,加个scope

@dddd1919 好的。感谢提醒

需要 登录 后方可回复, 如果你还没有账号请 注册新账号