2015-06-07 60 views
2

基本上我開發了一個應用程序,它有兩個命名空間:admin,api和公共的一個(例如簡單的resources :users)。所有的工作都很好,但是我正在重複一下自己,因爲api中的一些控制器可以很容易地用於admin如何在不同的命名空間中遵循DRY原則Rails 4.2?

如何在這種情況下幹我的代碼保留名稱空間?

謝謝!

回答

2

有幾個方面我能想到這樣做的:

  1. (不推薦) - 發送的網址,以相同的控制器在你的routes.rb文件。

  2. 共享命名空間,你的控制器從

繼承例如,你可以有:

# controllers/shared/users_controller.rb 
class Shared::UsersController < ApplicationController 
    def index 
    @users = User.all 
    end 
end 


# controllers/api/users_controller.rb 
class Api::UsersController < Shared::UsersController 
end 


# controllers/admin/users_controller.rb 
class Admin::UsersController < Shared::UsersController 
end 

上述將使您能夠在相關的控制器共享您的索引操作。在這種情況下,你的路由文件應該是這樣的:

# config/routes.rb 
namespace :api do 
    resources :users 
end 
namespace :admin do 
    resources :users 
end 

這絕對是一個很大的代碼共享一個動作,但數值的乘法,如共同行動的數量呢,而且,最重要的是,你的代碼位於在一個地方。

+0

讓主控制器目錄中的共享控制器有所不同?在'應用程序/控制器'? – WagnerMatosUK

+0

不,這兩種方式都很好,這取決於你想如何組織它。我認爲讓共享文件夾中的共享控制器提供更多的清晰度雖然 – Phil

+0

雖然沒有工作。 API控制器(例如)從'ApplicationController'繼承,而共享控制器則不是。當我添加'class Shared :: PostsController WagnerMatosUK