为什么所有的Rails助手提供给所有的意见,所有的时间? 有没有一种方法来禁用此?(Why ar

2019-06-17 15:21发布

为什么我能访问辅助方法,一个控制器视图中的一个不同的控制器? 有什么办法没有黑客/补丁的Rails禁用此?

Answer 1:

@George施雷伯的方法不起作用像Rails 3.1的; 代码已经显著改变。

然而,现在有更好的方法来禁用的Rails 3.1(希望以后)此功能。 在你的config / application.rb中添加此行:

config.action_controller.include_all_helpers = false

这将防止从ApplicationController的加载所有佣工 。

(对于任何人谁是有兴趣的, 这里的地方创建功能拉入请求 。)



Answer 2:

答案取决于Rails的版本。

导轨> = 3.1

更改include_all_helpers配置到false在哪里,你要应用配置的环境。 如果您想要配置适用于所有环境中,改变它application.rb

config.action_controller.include_all_helpers = false

当假的,它会跳过列入 。

轨道<3.1

删除以下行ApplicationController

helper :all

这样,每个控制器将加载自己的助手。



Answer 3:

在Rails 3, actioncontroller/base.rb (围绕线224):

def self.inherited(klass)
  super
  klass.helper :all if klass.superclass == ActionController::Base
end

所以,是的,如果你从派生类ActionController::Base ,所有的助手将包括在内。

来解决此问题,调用clear_helpersAbstractClass::Helpers ;列入ActionController::Base )在你的控制器代码的开始。 对于clear_helpers源代码注释:

# Clears up all existing helpers in this class, only keeping the helper
# with the same name as this class.

例如:

class ApplicationController < ActionController::Base
  clear_helpers
  ...
end


Answer 4:

实际上,在轨道2,的ActionController :: Base的默认功能是包括所有的帮手。

在07年2月24日20点33分47秒变更6222(3年前)由DHH :使你想要的所有助手默认的假设,所有的时间(是啊,是啊)

更改:

class ApplicationController < ActionController::Base 
  helper :all # include all helpers, all the time 
end 

由于导轨3的β1,即不再如在CHANGELOG注意到的情况下:

  • 补充说明的ActionController :: Base的现在做帮手:全部,而不是依赖于默认的ApplicationController在Rails中做到这一点[DHH]


文章来源: Why are all Rails helpers available to all views, all the time? Is there a way to disable this?