2
基本上我開發了一個應用程序,它有兩個命名空間:admin
,api
和公共的一個(例如簡單的resources :users
)。所有的工作都很好,但是我正在重複一下自己,因爲api
中的一些控制器可以很容易地用於admin
。如何在不同的命名空間中遵循DRY原則Rails 4.2?
如何在這種情況下幹我的代碼保留名稱空間?
謝謝!
基本上我開發了一個應用程序,它有兩個命名空間:admin
,api
和公共的一個(例如簡單的resources :users
)。所有的工作都很好,但是我正在重複一下自己,因爲api
中的一些控制器可以很容易地用於admin
。如何在不同的命名空間中遵循DRY原則Rails 4.2?
如何在這種情況下幹我的代碼保留名稱空間?
謝謝!
有幾個方面我能想到這樣做的:
(不推薦) - 發送的網址,以相同的控制器在你的routes.rb文件。
共享命名空間,你的控制器從
繼承例如,你可以有:
# 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
這絕對是一個很大的代碼共享一個動作,但數值的乘法,如共同行動的數量呢,而且,最重要的是,你的代碼位於在一個地方。
讓主控制器目錄中的共享控制器有所不同?在'應用程序/控制器'? – WagnerMatosUK
不,這兩種方式都很好,這取決於你想如何組織它。我認爲讓共享文件夾中的共享控制器提供更多的清晰度雖然 – Phil
雖然沒有工作。 API控制器(例如)從'ApplicationController'繼承,而共享控制器則不是。當我添加'class Shared :: PostsController
WagnerMatosUK