Rails 分离后端和前端

Rails separate backend and frontend

我对 rails 命名空间感到很困惑。我尝试创建自己的管理命名空间,因此将命名空间添加到路由中,效果很好。然后我将文件夹管理员添加到控制器中。 Admin::Controller 这是我在那个文件夹中的控制器的样子。

但是问题来了。我如何分离助手? rails 自动加载所有助手。我在配置中禁用了它,但现在它不会像模块 Admin::ApplicationHelper 那样手动加载它。

接下来需要分开的东西呢?像 i18N、session、flash?这个问题有教程吗?我正在使用 Rails 4。感谢您的建议

您只命名空间控制器、视图、模型和助手,而不是您提到的所有其他内容。如果你禁用了自动加载助手,你将不得不手动要求你需要的每一个:

require 'admin/admin_helper'

class Admin::Controller < ActionController::Base
  ... code ...

同样适用于任何其他助手,例如 application_helper 等。其他一切,会话、闪存、i18n 等等只是来自 ActionController::Base 的所有控制器继承的方法。这些没有命名空间。

回到帮助者的问题:您为它们命名的方式与为控制器命名的方式相同:

# app/helpers/admin/admin_helper.rb

module Admin::AdminHelper
  ... code ...
end

然后如果需要,只需在您的管理控制器中要求它。我会继续启用自动加载助手,以便放弃在任何地方都需要它们。

如您所见,rails 默认将所有助手包含到所有视图中。您可以通过添加

来关闭此功能
config.application_controller.include_all_helpers = false

这将导致仅包含 ApplicationHelper 和控制器的助手。添加

helper :foo

控制器将导致除默认值外还包含 FooHelper。如果有应该为所有管理控制器加载的助手,则将其添加到它们的基础 class。如果您需要的不止于此,请考虑使用 rails 引擎(打开 isolate_namespaces 选项)