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 选项)
我对 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 选项)