Rails路由:名称空间+资源+集合与匹配

时间:2014-09-29 16:55:14

标签: ruby-on-rails rails-routing

如何使用命名空间+资源+集合与使用匹配进行比较。

例如,假设我想处理某些端点的所有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

除了行数之外,还有什么理由让我更喜欢一种方式而不是另一种方式?

1 个答案:

答案 0 :(得分:1)

在这种情况下,match是最佳解决方案。资源配置应该主要用于定义休息路由(加上一些特殊的其他路由),正如关键字已经说明的那样暗示有一些资源作为端点。 例如,您使用Session#create而不是AuhtService.perfom_sing_in(将会话作为休息资源而不是执行对服务的rpc调用)

在你的情况下,你根本没有路由中的任何REST语义,所以匹配就好了