【发布时间】:2011-02-07 18:21:38
【问题描述】:
我正在构建一个 Rails 3 应用程序,用户可以在其中选择多个模板中的一个并构建一个小网站。我正在尝试在应用程序启动时初始化所有可用的模板。这本质上是一个让我定义它们的文件,然后为它们中的每一个调用Template.add(template),然后将它们存储在@@templates中,我可以通过Template.find(name)访问它们。
问题在于,在开发模式下,我调用Template.add 的初始化程序在第一个请求时被加载,然后在reload! 上被清除。我读过config.to_prepare,但它对我不起作用,可能是因为我需要这样的模板:
# template config at app/templates/template_name/template_name.rb
path = File.expand_path(Rails.root + 'app/templates')
Dir[File.join(path, '/*')].each do |template|
name = File.basename(template)
require File.join(path, name, "#{name}.rb")
end
我可以做些什么来在reload! 之后重新加载这些文件,或者让它们完全不被丢弃?另外,如果您有更好的处理方法的建议,我会全力以赴。我仍在使用 Rails,尤其是在配置方面。
我暂时通过在类中加载数据来避免这个问题。把我从这种丑陋的、非模块化的肮脏中拯救出来。
【问题讨论】:
-
我不确定我是否明白了你的问题。所以只是一个建议:你为什么不自动加载你的文件? hemju.com/2010/09/22/…
-
确实不熟悉这个过程,但无论如何它并不能解决我的问题。每次请求都会重新加载模板模型(cache_classes = false 在开发中)并且我的模板文件不会重新加载,因此在第二个请求中没有任何模板“注册”到模板模型。
-
你能解释一下为什么你认为这不适用于 to_prepare 吗?
-
这可能值得一看,因为它有很多关于初始化过程的细节:guides.rubyonrails.org/initialization.html
-
当我使用
to_prepare第一次运行时加载的所有内容,然后再没有。我想这是因为我使用的是require而不是load。
标签: ruby-on-rails ruby ruby-on-rails-3