您当前的位置: 首页 > 

Rails高级路由知识:筛选路由-路由冲突的优雅解决方案

发布时间:2017-03-10 11:34:41 ,浏览量:0

Rails项目有一个Article模型,对应ArticlesController控制器,其路由设置如下:

resources :articles do end

这样它的CRUD路径就都自动创建出来了 ;)

现在我想再添加一个对Article模型搜索的页面,那么首先要在控制器中添加对应的search方法:

def search
   render text:"hello search!!!" end

然后在Article默认路由集合后面添加一行新路由:

get "articles/search",to:"articles#search"

现在我们访问一下articles/search页面,咦?怎么出错了:

这里写图片描述

仔细看出错信息,原来Article之前的show路由恰恰可以匹配新的search路由,只不过原来的:id变成了search这个字符串哦.这就是为什么报Couldn’t find Article with id=search的原因了!

下面给出解决,我们只需要先禁用默认的show路由:

resources :articles,except:[:show] do resources :comments end

然后再生成一条筛选路由即可,所谓筛选路由就是对该路由内容进行细粒度匹配的方法:

get "articles/:id",to:"articles#show",constraints:{id:/\d+/}

路由都是从上之下依次匹配的,如果上面一条被匹配则路由匹配结束!这里只匹配id为数字的articles/xxx路径,所以search就会默认被忽略从而被后面search正确的路由所匹配!

筛选路由后面还可跟复杂的block,我们有机会再谈 ;)

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0468s