Конфигурация Rails и переменные класса

У меня есть простой класс, используемый для хранения конфигурации для изображений по умолчанию:

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 ответа

Вы должны включить 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

Так что проблема заключается в перезагрузке класса, которая выключена в разработке. Это означает, что классы перезагружаются при обновлении браузера, что означает, что состояние, сохраненное в этих классах, сдувается.

Другие вопросы по тегам