懒惰(并且喜欢DRY代码),我是那种会为重复出现的HTML标记编写一些小包装的人。 Rails提供的内容已经很好了,但有时我会有一些更具体的内容,我知道我会反复重复。
在某些情况下,部分可能是解决方案,但有时我只是经常调用代码片段来证明使用部分内容的开销。
现在我创建一个helpers / html_helper.rb文件并将它们粘贴在那里。问题是在开发期间不会根据请求动态重新加载帮助程序。因此,每次我调整我的代码段或其周围的代码时,我都必须杀死服务器并重新启动它。
当然,这只是一个5秒的过程,但我喜欢Rails开发和刷新浏览器的便利。所以我也很乐意为我的标记片段做到这一点。
注意:在助手模块中粘贴'unloadable'不起作用。
答案 0 :(得分:1)
好问题!这是一种我应该更频繁地滥用的技术。
#I go in environment.db (presumably it will work in one of the per-environment files, too.)
Dependencies.explicitly_unloadable_constants << 'NameOfHelperToReloadHere'
至少在我的安装中,该阵列开始是空的。 (通过控制台检查。)
我在本地进行了测试,它适用于我,至少在Rails 2.0.2上。该解决方案的主要功劳属于this gentleman。
答案 1 :(得分:1)
如果您将它们粘贴在application_helper.rb中,则每次都会加载它们,并且可用于您的所有视图。每次在开发模式下加载(或者至少我没有遇到任何问题)。
我通常会创建我在整个站点中使用的小助手(例如可排序的表头),它们使用相同的逻辑。
答案 2 :(得分:1)
这应该在每个请求上重新加载所有助手(假设你已经坚持默认的命名约定)
#Put this in config/environments/development.rb
ActiveSupport::Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize})
或者如果您使用的是旧版本的Rails(我认为是2.0.2或更早版本)
#Put this in config/environments/development.rb
Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize})
在RoR 2.1.1中为我工作
更新:修改后的顶部代码段以包含“ActiveSupport ::”,必须从我的代码中错误地复制/粘贴。
答案 3 :(得分:0)
这不是一个真正的解决方案,但您可以使用测试(TestUnit,RSpec或其他)来确保您的帮助程序按预期工作。这样,您就不会依赖自动重新加载助手了。