【问题标题】:Helpers in Rails 4Rails 4 中的助手
【发布时间】:2014-02-23 21:58:42
【问题描述】:

我用 Rails 编写了一个应用程序,它发展迅速,我正在学习它。但我不了解助手。

application_helper.rb

module ApplicationHelper
    # This file it's empty
end

users_helper.rb

module UsersHelper

    def avatar
        # Do something
    end
end

customer_helper.rb

module CustomerHelper
    # This file it's empty
end

为什么在任何客户看来都可以在用户助手模块上调用头像助手方法? 那么,为什么要在许多文件中分开帮助器呢?

提前致谢。

P.S:Rails 的第 4 版。

【问题讨论】:

  • 你确定你的 users_helper 是这样定义的:module ApplicationHelper?如果是这样,那么您已经在 ApplicationHelper 模块中定义了 avatar 方法,这就是它起作用的原因。
  • 对不起,示例写错了。
  • 我假设你写错了问题?并且 users_helper 有:UsersHelper,对吗?
  • 将你的助手分割成不同的文件会让你的代码更干净。当存在三个空文件时,您可能不会注意到,但您的应用程序可能会增长,然后您会感谢某些结构而不是一个大文件。默认情况下,每个视图都可以访问任何助手。

标签: ruby-on-rails-4 helpers


【解决方案1】:

因为默认情况下,所有控制器都包含所有助手。在这种情况下,单独的文件实际上只是用于逻辑分离。你可以改变这种行为:

默认情况下,每个控制器都会包含所有助手。

在以前的 Rails 版本中,控制器将包含一个帮助器 其名称与控制器的名称匹配,例如,MyController 将 自动包含 MyHelper。返回旧的行为集 config.action_controller.include_all_helpersfalse

http://api.rubyonrails.org/classes/ActionController/Helpers.html

【讨论】:

  • 他们默认包含所有助手是否有特殊原因?似乎没有必要。包含所有而不是仅在每个控制器中包含您需要的帮助器对性能有负面影响吗?
【解决方案2】:

补充迈克坎贝尔的回答:


框架

Rails 很神奇,它是一组文件,它们被称为 依次

这些文件包含classesmethods等;但它们仍然是文件。 这意味着当你通过 Rails 运行一个动作时,它会加载 一系列其他 dependent 文件来帮助它运行(这就是 框架是)

Rails 的设计使得您的helper 方法全部 每次运行动作时加载。我不知道为什么,但它有帮助 管理应用不同区域的方法

所以回答你的问题,没有真正的理由将助手分开,至少在 Rails 4 中是这样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多