Rails 查看助手如何工作
How does Rails View Helper work
我最近遇到了一个与 rails 视图助手相关的棘手情况。
情况如下-
我有一个控制器 Feature1::Feature1.1::Feature1.1.1Controller
。
Feature1.1
还包括其他控制器,如 Feature1.1.2Controller
、Feature1.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)
我最近遇到了一个与 rails 视图助手相关的棘手情况。 情况如下-
我有一个控制器 Feature1::Feature1.1::Feature1.1.1Controller
。
Feature1.1
还包括其他控制器,如 Feature1.1.2Controller
、Feature1.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)