对于 Rails,我应该在哪里放置 html 片段?我不想要部件,但我希望它们在开发过程中重新加载



由于懒惰(喜欢DRY代码),我是那种会为重复出现的HTML标记编写一些小包装器的人。Rails提供的那些已经很好了,但有时我会有一些更具体的东西,我知道我会一遍又一遍地重复。

在某些情况下,分部可以是解决方案,但有时我只是过于频繁地调用片段,以证明使用分部的开销是合理的。

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

当然,这只是一个5秒的过程,但我喜欢Rails只需开发然后刷新浏览器的便利性。所以我也很想把它作为我的标记片段。

注意:仅仅在helper模块中粘贴"unloadable"是不起作用的。

好问题!这是一种我应该更经常使用的技巧。

    #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上是这样。这个解决方案的主要功劳属于这位先生。

如果将它们粘贴在application_helper.rb中,则每次都会加载它们,并可用于所有视图。这是每次在开发模式下加载的(或者至少我没有遇到任何问题)。

我通常会创建一些小助手,在整个站点中使用(例如,可排序的表头),这些助手使用相同的逻辑。

这应该在每个请求上重新加载所有帮助程序(假设您坚持默认的命名约定)

#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::",这一定是从我的代码中错误地复制/粘贴的。

这不是一个真正的解决方案,但您可以使用测试(TestUnit、RSpec或其他)来确保您的助手按预期工作。这样,您就不会那么依赖助手的自动重新加载了。

最新更新