Rails 4中的辅助方法

4

我在Rails上编写了一个应用程序,它正在快速增长并且我在学习中。但是我不太明白helpers是什么。

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

任何客户都可以在用户帮助器模块上调用头像帮助器方法,为什么?
那么,为什么要将帮助器分成多个文件?
提前致谢。
附注:Rails版本为4。

你确定你的 users_helper 是这样定义的吗:module ApplicationHelper?如果是的话,那么你已经在 ApplicationHelper 模块中定义了 avatar 方法,这就是为什么它能够工作的原因。 - Surya
抱歉,写的例子有错误。 - Javier Valencia
我猜你的问题写错了吗?users_helper应该是 UsersHelper,对吧? - Surya
将您的辅助程序拆分为不同的文件将使您的代码更清晰。 当有三个空文件时,您可能不会注意到,但是您的应用程序可能会增长,然后您将感激一些结构而不是一个大文件。 默认情况下,每个视图都可以访问任何辅助程序。 - Thomas Klemm
2个回答

7

因为所有的助手函数都默认包含在所有控制器中。在这种情况下,独立的文件只是为了逻辑分离而已。但你可以更改这个行为:

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

在 Rails 的早期版本中,控制器会自动包括与其名称相匹配的助手函数,例如 MyController 会自动包括 MyHelper。要返回旧的行为,请将 config.action_controller.include_all_helpers 设置为 false

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


他们为什么要默认包含所有帮助程序?这似乎是不必要的。相比于在每个控制器中只包含所需的帮助程序,包含所有帮助程序是否会对性能产生负面影响? - WhyAyala

0
补充Mike Campbell的回答:

框架

虽然 Rails 看起来很神奇,但它只是一组按顺序调用的文件。

这些文件包含了 方法 等等,但它们仍然只是文件。

这意味着当你通过 Rails 运行一个操作时,它会加载一系列其他依赖文件来帮助它运行(这就是框架的作用)。

Rails 的设计使得每次运行操作时,你的 helper 方法都会被全部加载。我不知道为什么,但它有助于管理应用程序不同区域的方法。

所以回答你的问题,至少在 Rails 4 中,没有将 helpers 拆分的真正原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接