会员和收集路线是什么意思?
阅读本文: http : //guides.rubyonrails.org/routing.html#adding-more-restful-actions
添加“会员路线”是什么意思?
或者添加路线到集合?
在谈论路线时,会员和集合是什么?
它们是在Rails中向基于资源的路由添加其他操作的两种方法。
- 成员路由需要ID,因为它作用于成员。
- 收集路由不需要ID,因为它作用于对象集合。
我喜欢用RESTful URL来考虑它们。 考虑资源/模型Foo
的基础知识
GET /foo # FooController#index GET /foo/:id # FooController#show GET /foo/new # FooController#new POST /foo # FooController#create GET /foo/:id/edit # FooController#edit PUT /foo/:id # FooController#update DELETE /foo/:id # FooController#destroy
请注意:
- 一些路由具有:Foo.id的id占位符,因此请参考特定的 Foo
- 有些路由没有:id,因此引用所有 Foos(和/或没有特定的foo,如#new和#create)
- 某些路由(index / create,show / update / destroy)具有相同的URL,并使用HTTP方法区分它们
- 一些路由(编辑/显示)基本相同(方法和URL前缀),除了最后的不同后缀(包括“无后缀”)。
成员路由和收集路由允许您使用与上面列出的相同的技术添加其他路由/操作。
成员路由使用您提供的URL后缀和HTTP方法将自定义操作添加到特定实例 。 所以,如果你有一个成员路由声明:member => { :bar => :get }
。 你会得到另一条路线:
GET /foo/:id/bar # FooController#bar
注意它如何以“编辑”的方式重载GET /foo/:id
。 这就是您实现“删除”操作的方式,该操作为“销毁”操作提供UI。
类似地,收集路由会为集合和/或非特定实例添加重载(由您自行决定它的含义)。 所以,如果你声明:collection => { :baz => :get }
,你会得到一条额外的路线:
GET /foo/baz # FooController#baz
……和new
的一样。
您还可以自定义HTTP方法。
例如,我最近有一个项目,我需要对Comment
进行“回复”操作。 它与Comment#create
(使用POST)基本相同,只是它引用了特定的父Comment
。 所以,我创建了一个成员路由:: :member => { :reply => :post }
。 这给了我:
POST /comment/:id/reply # CommentController#reply
这样可以保持路线的安静,同时还可以扩展基本的7个动作。
内置的成员路由是show
, edit
, update
和destroy
,因为它们处理单个记录。 index
将是一个收集路由,因为它返回一组记录。
所以这取决于你是想用单个记录(成员)还是多个记录(集合)做某事。
url助手反映单数(成员)和复数(集合)。 例如:
这是一个成员:
person_path(@person)
这是一个集合:
people_path()
如果定义自定义集合路径,则在routes.rb
可能如下routes.rb
:
resources :people do member do put :make_manager end collection do get :show_managers end end
为了让某人成为一个马槽:
make_manager_person_path(@person)
列出所有经理:
show_managers_people_path()
如果你以不同的方式使用它,我不认为这条路线会“关心”,但这是Rails方式。 它将使您的代码更易于阅读,其他编码人员将更容易理解和维护您的代码。