使用Rails,我应该在哪里放置html片段?我不想要偏见,但我希望它们在开发过程中重新加载

时间:2008-10-02 14:00:16

标签: html ruby-on-rails ruby

懒惰(并且喜欢DRY代码),我是那种会为重复出现的HTML标记编写一些小包装的人。 Rails提供的内容已经很好了,但有时我会有一些更具体的内容,我知道我会反复重复。

在某些情况下,部分可能是解决方案,但有时我只是经常调用代码片段来证明使用部分内容的开销。

现在我创建一个helpers / html_helper.rb文件并将它们粘贴在那里。问题是在开发期间不会根据请求动态重新加载帮助程序。因此,每次我调整我的代码段或其周围的代码时,我都必须杀死服务器并重新启动它。

当然,这只是一个5秒的过程,但我喜欢Rails开发和刷新浏览器的便利。所以我也很乐意为我的标记片段做到这一点。

注意:在助手模块中粘贴'unloadable'不起作用。

4 个答案:

答案 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或其他)来确保您的帮助程序按预期工作。这样,您就不会依赖自动重新加载助手了。