Rails配置和类变量

时间:2015-08-14 09:08:46

标签: ruby-on-rails ruby-on-rails-4 configuration initializer class-variables

我有一个简单的类用于存储默认图像的配置:

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。我显然重新启动了服务器等。

为什么它的属性可能为零?

2 个答案:

答案 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)

所以问题是在开发过程中关闭的类重新加载。这意味着在刷新浏览器时会重新加载类,这意味着存储在这些类中的状态会被吹走。

相关问题