代码之家  ›  专栏  ›  技术社区  ›  Tyler

为公共默认值重构嵌套路由

  •  0
  • Tyler  · 技术社区  · 10 年前

    我有一些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
    

    是否有方法重构/DRY代码以设置 defaults (甚至 only )就在一个地方,只有这一组路线?该应用程序还提供其他路线的HTML,因此它不能成为整个应用程序的总括设置。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Kirti Thorat    10 年前

    移动 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
    
        2
  •  0
  •   Nickolay Kondratenko    10 年前

    可以使用迭代器,如下所示:

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

    但是我看到你有不同的,所以你也可以把它传递给迭代器