2015-06-07 4 views
2

В основном я разработал приложение, имеющее два пространства имен: admin, api и общедоступный (например, resources :users). Все работает нормально, однако я немного повторяюсь, поскольку некоторые из контроллеров в api, например, могут быть легко использованы в admin.Как следовать принципам DRY в разных пространствах имен Rails 4.2?

Как я могу сушить свой код в этом случае, сохраняя пространства имен?

Спасибо!

ответ

2

Есть несколько способов, которыми я могу думать делать это:

  1. (НЕ РЕКОМЕНДУЕТСЯ) - Отправить URL, к тому же контроллеру в вашем routes.rb файле.

  2. Shared имен, контроллеры наследуют от

Например, вы могли бы:

# 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

Имеет ли смысл иметь общие контроллеры в каталоге основного контроллера? В 'app/controllers'? – WagnerMatosUK

+0

нет, в любом случае это нормально, это зависит от того, как вы хотите его организовать. Я думаю, что наличие общих контроллеров в общей папке обеспечивает большую ясность, хотя – Phil

+0

Это не сработало. Контроллер API (например) наследовал от «ApplicationController», в то время как общий контроллер этого не делает. Когда я добавил 'class Shared :: PostsController WagnerMatosUK

Смежные вопросы