【豆知识】 routes.rb中: resources 、namespace、member 和 collection的使用区别
目标:
掌握resources 、namespace、member 和 collection的使用区别。
步骤:
Step 01:关于resources
RESTful风格的路由动词默认有7个(分别为:index, show, create, new, edit, update, destroy)。
复数型资源
例如:rails101中
这里使用resources :groups一行代码,这是复数资源,即可产生同名controller即groups_controller.rb中7个action对应的路由(分别为:index, show, create, new, edit, update, destroy)。
此外还有单数型资源,如下所示
与复数资源相比,特别之处在于没有index action了,所有的URL Helper也皆为单数形式,显示出来的网址也是单数。但是Singular resource的文件命名仍为复数,例如posts_controller.rb
指定Controller
虽然resource默认采用同名的controller,但是我们也可以修改,例如
Step 02:关于namespace
例如:rails101中
这里使用的是
就样连http://localhost:3000/admin/就会使用ProjectsController index action了。
实例参考:https://github.com/Kerzzi/jfshop/blob/master/config/routes.rb
Step 03:关于collection
除了惯例中的七个Actions外,如果你需要自定群集的Action,可以这样设定:
如此便会有
post送出的join、publish它生成的网址上都是带有id的,且member(即job)是单数,不加s的。
如此会有publish_job_path(@job)
这个URL Helper,产生出如jobs/1/publish
这样的网址。
Step 05:总结
- member 是对单个实体进行操作,创建路由格式是:
/:controller/:id/:your_method
,命名的路由是用id生成且是单数。 - collection 是对实体集合进行操作,创建路由格式是:
/:controller/:your_method
,网址不带id,是复数。 - resource是直接生成一组资源所需要的7个action。
更多ROR【豆知识】:
更多ROR【豆知识】请前往:https://github.com/Kerzzi/ruby_notes/tree/master/04_ROR_beans