Rails View Helper如何工作

时间:2016-10-25 11:13:59

标签: ruby-on-rails ruby ruby-on-rails-3

我最近遇到了与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正在使用method1的定义,即写入对于控制器feature1.1.2

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

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

我正在使用rails3

2 个答案:

答案 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将使用后一个文件中的方法(按字母顺序排列)