Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在不同的名称空间Rails 4.2中遵循DRY原则?_Ruby On Rails_Api_Ruby On Rails 4_Namespaces - Fatal编程技术网

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
中使用

在这种情况下,如何干燥代码以保留名称空间


谢谢

我有几种方法可以考虑:

  • (不推荐)-将URL发送到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 
    

    共享一个操作肯定需要很多代码,但值会随着共享操作的数量而成倍增加,而且最重要的是,您的代码位于一个位置。

    将共享控制器放在主控制器目录中会有所不同吗?在
    app/controllers
    ?不,任何一种方式都可以,这取决于您想要如何组织它。我确实认为,将共享控制器放在一个共享文件夹中可以提供更清晰的思路,但这并不奏效。例如,API控制器是从ApplicationController继承的,而共享控制器不是。当我添加
    class Shared::PostsController
    时,它不起作用,我开始加载ErrorsOrry,任何基本控制器都应该从ApplicationController继承。我现在正在更新答案
    # config/routes.rb
    namespace :api do
      resources :users
    end
    namespace :admin do
      resources :users
    end