为什么我能访问辅助方法,一个控制器视图中的一个不同的控制器? 有什么办法没有黑客/补丁的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_helpers
( AbstractClass::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?