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

时间:2020-03-06 15:01:39  来源:igfitidea点击:

懒惰(并且喜欢DRY代码),我是那种会为重复的HTML标记编写一些小包装的人。 Rails提供的功能已经很不错了,但是有时候我有一些更具体的信息,我知道我会一遍又一遍地重复。

在某些情况下,可以使用局部函数作为解决方案,但有时我只是经常以代码段方式调用以证明使用局部函数的开销是合理的。

现在,我创建一个helpers / html_helper.rb文件并将其粘贴在该文件中。问题是在开发过程中不会按请求动态地重新加载助手。因此,每次我调整代码段或者其周围的代码时,都必须杀死服务器并重新启动它。

诚然,这只是一个5秒钟的过程,但是我喜欢Rails的便利,即先开发然后刷新浏览器。因此,我也希望将其用于标记片段。

注意:仅将" unloadable"粘贴在helper模块内部是行不通的。

解决方案

这不是一个真正的解决方案,但是我们可以使用测试(TestUnit,RSpec或者其他任何工具)来确保助手能够按预期工作。这样,我们就不必那么依赖自动加载帮助程序了。

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

#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 ::",必须从我的代码中复制/粘贴错误。