Rails将后端和前端分开

时间:2015-04-10 18:56:23

标签: ruby-on-rails ruby namespaces frontend backend

我对rails命名空间感到困惑。我尝试创建自己的管理命名空间,因此添加了命名空间到路由,这很好用。然后我将文件夹admin添加到控制器中。     联系::控制器 这就是我在该文件夹中的控制器的外观。

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

接下来需要分开的东西怎么样?像i18N,会话,闪烁?有这个问题的教程吗?我使用Rails 4.感谢您的建议

2 个答案:

答案 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选项)