Ruby on rails 如何在不同的名称空间Rails 4.2中遵循DRY原则?
基本上,我开发了一个应用程序,它有两个名称空间:Ruby on rails 如何在不同的名称空间Rails 4.2中遵循DRY原则?,ruby-on-rails,api,ruby-on-rails-4,namespaces,Ruby On Rails,Api,Ruby On Rails 4,Namespaces,基本上,我开发了一个应用程序,它有两个名称空间:admin、api和公共名称空间(例如,resources:users)。所有的工作都很好,但是我重复了很多,比如说api中的一些控制器可以很容易地在admin中使用 在这种情况下,如何干燥代码以保留名称空间 谢谢 我有几种方法可以考虑: (不推荐)-将URL发送到routes.rb文件中的同一控制器 控制器从中继承的共享命名空间 例如,您可以: # controllers/shared/users_controller.rb class Shar
admin
、api
和公共名称空间(例如,resources:users
)。所有的工作都很好,但是我重复了很多,比如说api
中的一些控制器可以很容易地在admin
中使用
在这种情况下,如何干燥代码以保留名称空间
谢谢 我有几种方法可以考虑:
# 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
共享一个操作肯定需要很多代码,但值会随着共享操作的数量而成倍增加,而且最重要的是,您的代码位于一个位置。将共享控制器放在主控制器目录中会有所不同吗?在
app/controllers
?不,任何一种方式都可以,这取决于您想要如何组织它。我确实认为,将共享控制器放在一个共享文件夹中可以提供更清晰的思路,但这并不奏效。例如,API控制器是从ApplicationController继承的,而共享控制器不是。当我添加class Shared::PostsController
时,它不起作用,我开始加载ErrorsOrry,任何基本控制器都应该从ApplicationController继承。我现在正在更新答案
# config/routes.rb
namespace :api do
resources :users
end
namespace :admin do
resources :users
end