1

我的一个 AR 类上有一个类实例变量。我在启动时使用初始化程序设置了它的值,之后,除了从中读取之外,再也不要触摸它。在开发模式下,该值会在第一次向 Web 服务器请求后消失。但是,在运行测试、使用控制台或运行生产服务器时,不会发生这种情况。

# The AR class
class Group < ActiveRecord::Base

  class << self
    attr_accessor :path
  end

end

# The initializer
Group.path = File.join(RAILS_ROOT, "public", "etc")

# First request in a view
%p= Group.path #=> "/home/rails/app/public/etc"

# Second request in a view
%p= Group.path #=> nil

开发模式有什么东西可以从每个请求的类中删除实例变量吗?如果是这样,有没有办法为特定的变量或类禁用它?

4

1 回答 1

0

在开发模式下,类不会被缓存,这意味着它们都会在每次请求时重新加载。在测试和生产模式下,它们被缓存,这意味着您的类实例变量存在。缓存设置在 config/environments 的相关文件中设置。

一种解决方法是在初始化程序中设置一个全局变量或环境变量,然后定义您的类级访问器以返回该值。

于 2009-08-10T20:03:03.363 回答