重构常见默认的嵌套路由

时间:2014-03-21 16:23:38

标签: ruby-on-rails ruby-on-rails-4 refactoring rails-routing

我有一些API的路由都具有相同的默认值(format: :json):

namespace :api do
  namespace :v1 do
    resources :users,    only: [:index, :show, :update],           defaults: { format: :json }
    resources :items,    only: [:index, :show, :update, :destroy], defaults: { format: :json }
    resources :posts,    only: [:index, :show, :update],           defaults: { format: :json }
    resources :comments, only: [:index, :show, :update],           defaults: { format: :json }
    resources :flags,    only: [:index, :show, :update, :create],  defaults: { format: :json }
  end
end

有没有办法重构/干掉代码,只为这一组路由在一个地方设置defaults(甚至only)?该应用程序还在其他路线上提供HTML,因此它不能成为整个应用程序的一揽子设置。

2 个答案:

答案 0 :(得分:1)

在命名空间级别移动defaults: {format: :json}和常见only选项。命名空间可以选择它们。

 namespace :api, defaults: { format: :json }, only: [:index, :show, :update]  do
  namespace :v1 do
    resources :users  
    resources :items,   only: [:index, :show, :update, :destroy]
    resources :posts
    resources :comments
    resources :flags,    only: [:index, :show, :update, :create]
  end
end

答案 1 :(得分:0)

您可以使用如下的迭代器:

[:users, :items, :posts, :comments, :flags].each do |res|
  resources res, only:[...], defaults: {}
end

但我发现你们只有不同之处,所以你也可以将它传递给迭代器