[英]Customize Rails' Default Resourceful Route Path
我想更改Rails资源路由的默认行为,移动所有资源的create
路径,使其成为/resources/new
而不是/resources
的POST。
让我们假设一个如此指定的资源丰富的路线:
# routes.rb
resources :events
将生成的实际路线是:
$ rake routes
Prefix Verb URI Pattern Controller#Action
events GET /events(.:format) events#index
POST /events(.:format) events#create
new_event GET /events/new(.:format) events#new
edit_event GET /events/:id/edit(.:format) events#edit
event GET /events/:id(.:format) events#show
PATCH /events/:id(.:format) events#update
PUT /events/:id(.:format) events#update
DELETE /events/:id(.:format) events#destroy
注意, create
操作是由POST到/events
路径触发的。
现在,如果我想改变那条路径,我可以在每个资源的基础上“手动”完成:
# routes.rb
# I've placed the routes in this order, and used `as: "new_event"`,
# to avoid generating an `events_new` path helper.
post 'events/new' => 'events#create', as: "new_event"
resources :events, except: [:create]
以下是生成的路线:
$ rake routes
Prefix Verb URI Pattern Controller#Action
new_event POST /events/new(.:format) events#create
events GET /events(.:format) events#index
GET /events/new(.:format) events#new
edit_event GET /events/:id/edit(.:format) events#edit
event GET /events/:id(.:format) events#show
PATCH /events/:id(.:format) events#update
PUT /events/:id(.:format) events#update
DELETE /events/:id(.:format) events#destroy
大! create
操作现在由POST到/events/new
路径而不是/events
路径触发。
每个其他路由/帮助程序的行为与以前完全相同 - 包括对/events/new
的GET以及new_event
路径/ url帮助程序。
而不是手动覆盖每个create
操作,有没有办法只更改用于该特定操作的默认路径?
如果做不到这一点,我可以用什么其他方法来改变一堆资源丰富的路线,这样他们的创建动作就会被移到/new
如上所述?
谢谢!
您可以通过添加一个在一个地方为您覆盖的模块来简化您的生活。 例如:
module MyResources
def my_resources(resource_name, opts = {}, &block)
opts = opts.merge(except: [:create])
resources(resource_name, opts, &block)
post "#{resource_name}/new" => "#{resource_name}#create", as: "new_{resource_name}"
end
end
ActionDispatch::Routing::Mapper.__send__ :include, MyResources
然后在您的routes.rb中,您可以执行以下操作:
my_resources :events
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.