【发布时间】:2015-08-22 01:18:52
【问题描述】:
基本上我开发了一个有两个命名空间的应用程序:admin、api 和公共的(例如简单的resources :users)。一切正常,但是我重复了很多次,因为 api 中的一些控制器可以很容易地在 admin 中使用。
在这种情况下,我如何干燥我的代码以保留命名空间?
谢谢!
【问题讨论】:
标签: ruby-on-rails api ruby-on-rails-4 namespaces
基本上我开发了一个有两个命名空间的应用程序:admin、api 和公共的(例如简单的resources :users)。一切正常,但是我重复了很多次,因为 api 中的一些控制器可以很容易地在 admin 中使用。
在这种情况下,我如何干燥我的代码以保留命名空间?
谢谢!
【问题讨论】:
标签: ruby-on-rails api ruby-on-rails-4 namespaces
我可以想到几种方法:
(不推荐) - 将 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
以上内容将允许您在相关控制器之间共享您的索引操作。在这种情况下,您的路线文件如下所示:
# config/routes.rb
namespace :api do
resources :users
end
namespace :admin do
resources :users
end
共享一个操作肯定有很多代码,但价值会随着共享操作的数量成倍增加,而且最重要的是,您的代码位于一个位置。
【讨论】:
app/controllers?
ApplicationController 继承,而共享控制器没有。当我添加 class Shared::PostsController < ActionController::Base 时它不起作用,我开始收到大量错误