Rails 查看助手如何工作

How does Rails View Helper work

我最近遇到了一个与 rails 视图助手相关的棘手情况。 情况如下-

我有一个控制器 Feature1::Feature1.1::Feature1.1.1ControllerFeature1.1 还包括其他控制器,如 Feature1.1.2ControllerFeature1.1.3Controller...

当然文件夹中的相关视图助手 app/helpers/feature1/feature1.1/...

现在我面临的真正问题是 feature1.1 的一些助手包含相同的方法名称 method1 和相关定义。

我想知道 rails 如何识别所有这些助手,因为我注意到 method1 即在控制器 feature1.1.1 的视图中调用正在使用 feature1.1.1 的定义=17=] 即为控制器编写 feature1.1.2.

那么 rails 是否将一个文件夹中定义的所有辅助模块视为一个?

在视图 feature1/feature1.1/feature1.1.1/index 中,我正在为 method1 进行方法调用。

我正在使用 rails3

这在一定程度上取决于您的 Rails 版本。对于较早的 Rails 版本,Rails 只包括 application_helper.rb<controler_name>_helper.rb。 可以通过 helper :helper_name1, :helper_name2, ... 在您的控制器中包含其他辅助模块。

对于更高的 Rails 版本(4.2.? 及更高版本,也许还有以前的版本),Rails 会同时包含您的助手文件夹中的所有助手。您可以在 application.rb 内设置 config.action_controller.include_all_helpers = false,您将退回到旧行为。

这使得助手仅在您的视图中可用。如果你想在你的控制器中使用一个助手,你仍然必须包含你的助手 include XXXHelper

我做了一些研究,想分享一些额外的信息。 正如@slowjack2k 提到的,rails 将视图助手作为默认行为包含在内。 但我的问题是关于跨多个助手的相同方法名称的情况。 我发现 this 文章在这种情况下很有用。虽然它解释了 Rails 4 的行为,但我发现它的行为与 Rails 3.2.2.

的行为相同

我来总结一下文章-

If there will be any conflict in the same names of methods in different helper modules, rails will use method from latter file (alphabetically)