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,我们有机会再谈 ;)
大熊猫侯佩 认证博客专家 Swift Objective-C Xcode 非自由程序员,博客认证专家。汇编板块版主, 其他开发语言大版版主。对App、以及Cocos2D、SpriteKit游戏开饶有兴趣。目前常用的语言是ObjC、Swift、Ruby等。不过看到编程艺术、ASM、逆向和C时依然欲罢不能。虽然不是,但喜欢黑客的思维和哲学,认为社会工程学很酷,但还没有实际用来撩过妹。