我有一个简单的类用于存储默认图像的配置:
class DefaultImages
class <<self
attr_accessor :format
attr_accessor :directory
attr_accessor :width
attr_accessor :height
end
def self.setup
yield self
end
end
我在初始化程序中填充它:
DefaultImages.setup do |config|
config.format = :png
config.directory = 'default'
config.width = 2161
config.height = 1441
end
如果我在访问者中记录这里的属性,则填充所有属性:
Rails.logger.warn "Default Image Format: #{DefaultImages.format}" # png
但是,当我稍后在应用程序中访问DefaultImages
的属性时,它们都是nil
。如果我从控制台访问其属性,情况也是如此。
除了在初始化程序运行后访问其属性之外,没有其他代码触及DefaultImages
。我显然重新启动了服务器等。
为什么它的属性可能为零?
答案 0 :(得分:3)
您需要在班级中加入Singleton
模块:
require 'singleton'
class DefaultImages
include Singleton
class <<self
attr_accessor :format
attr_accessor :directory
attr_accessor :width
attr_accessor :height
end
def self.setup
yield self
end
end
答案 1 :(得分:1)
所以问题是在开发过程中关闭的类重新加载。这意味着在刷新浏览器时会重新加载类,这意味着存储在这些类中的状态会被吹走。