如何使用命名空间+资源+集合与使用匹配进行比较。
例如,假设我想处理某些端点的所有HTTP方法。
namespace :webhooks do
resources :some_service, only: :none do
collection do
get :some_action
post :some_action
put :some_action
patch :some_action
delete :some_action
end
end
end
# Compare to
match '/webhooks/some_service/some_action', to: 'webhooks/some_service#some_action', via: :all
以下是rake routes
的相关路线:
Prefix Verb URI Pattern Controller#Action
some_action_webhooks_some_service_index GET /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
POST /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
PUT /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
PATCH /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
DELETE /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
webhooks_some_service_some_action /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
除了行数之外,还有什么理由让我更喜欢一种方式而不是另一种方式?
答案 0 :(得分:1)
在这种情况下,match
是最佳解决方案。资源配置应该主要用于定义休息路由(加上一些特殊的其他路由),正如关键字已经说明的那样暗示有一些资源作为端点。
例如,您使用Session#create
而不是AuhtService.perfom_sing_in
(将会话作为休息资源而不是执行对服务的rpc调用)
在你的情况下,你根本没有路由中的任何REST语义,所以匹配就好了