我最近遇到了与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
正在使用method1
的定义,即写入对于控制器feature1.1.2
。
rails是否将一个文件夹中定义的所有辅助模块视为一个?
在视图feature1/feature1.1/feature1.1.1/index
中,我正在为method1
进行方法调用。
我正在使用rails3
答案 0 :(得分:1)
这取决于您的Rails版本。使用更好的Rails版本,Rails只包含application_helper.rb
和<controler_name>_helper.rb
。
可以通过控制器中的helper :helper_name1, :helper_name2, ...
包含其他辅助模块。
随着后来的Rails版本(4.2。?及以上版本,也许是之前的版本),Rails会立即包含助手文件夹中的所有助手。您可以在config.action_controller.include_all_helpers = false
内设置application.rb
,然后您将回归旧行为。
这使得助手仅在您的视图中可用。如果您想在控制器中使用帮助程序,则仍需要将助手包含include XXXHelper
。
答案 1 :(得分:0)
我做了一些研究,想分享一些额外的信息。
根据@ slowjack2k提到的,视图助手被rails包含为默认行为。
但我的问题是关于多个助手的相同方法名称的情况。
我发现this文章在这种情况下很有用。虽然它解释了Rails 4
的行为,但我发现Rails 3.2.2
的行为方式相同。
我将总结一下这篇文章 -
如果不同帮助模块中的方法名称相同,则rails将使用后一个文件中的方法(按字母顺序排列)