阅读本文:http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
添加“会员路线”是什么意思?
或者添加路线到集合?
谈论路线时,会员和集合是什么?
答案 0 :(得分:57)
它们是在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
请注意:
会员路线和收集路线允许您使用与上面列出的相同的技术添加其他路线/操作。
成员路由使用您提供的URL后缀和HTTP方法向特定实例添加自定义操作。所以,如果你有:member => { :bar => :get }
的成员路线声明。你会得到另一条路线:
GET /foo/:id/bar # FooController#bar
注意它如何以与`edit'相同的方式重载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个动作。
答案 1 :(得分:11)
内置成员路由为show
,edit
,update
和destroy
,因为它们处理单个记录。 index
将是一个收集路由,因为它返回一组记录。
所以这取决于你是想对单个记录(成员)还是多个记录(集合)做些什么。
url助手反映单数(成员)和复数(集合)。例如:
这是会员:
person_path(@person)
这是一个集合:
people_path()
如果您定义了自定义收藏路径,则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方式。它将使您的代码更易于阅读,其他编码人员将更容易理解和维护您的代码。