我对rails命名空间感到困惑。我尝试创建自己的管理命名空间,因此添加了命名空间到路由,这很好用。然后我将文件夹admin添加到控制器中。 联系::控制器 这就是我在该文件夹中的控制器的外观。
但问题来了。我如何区分助手? rails自动加载所有帮助程序。我在配置中禁用了它,但现在它不会像模块Admin :: ApplicationHelper那样手动加载它。
接下来需要分开的东西怎么样?像i18N,会话,闪烁?有这个问题的教程吗?我使用Rails 4.感谢您的建议
答案 0 :(得分:0)
您只有命名空间控制器,视图,模型和帮助程序,而不是您提到的其他所有内容。如果您禁用了自动加载助手,则必须手动要求每个助手:
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
如果需要,只需在管理员控制器中使用它。我会继续启用自动加载帮助程序,以便放弃在任何地方都需要它们。
答案 1 :(得分:0)
您已经注意到rails默认将所有帮助程序都包含在所有视图中。你可以通过添加
来关闭它config.application_controller.include_all_helpers = false
这将导致仅包含ApplicationHelper和控制器的帮助程序。添加
helper :foo
对于控制器,除了默认值之外,还会包含FooHelper。如果有应该为所有管理控制器加载的帮助程序,则将其添加到其基类。如果您需要更多内容,请考虑使用rails引擎(启用isolate_namespaces选项)