Глобальный массив Ruby on Rails - PullRequest
4 голосов
/ 17 марта 2011

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

У меня есть хотяэтот массив в ApplicationController, но он умрет, когда запрос закончится или нет?и мне просто нужно заполнить его один раз каждый раз, когда приложение запускается, а не каждый раз, когда вызывается действие контроллера.

Массив заполняется из базы данных и должен быть уже загружен.

Заранее спасибо за любые рекомендации.

Ответы [ 3 ]

5 голосов
/ 17 марта 2011

Создайте внутри себя файл config/initializers с именем независимо от того, что вы хотите.rb и поместите туда свой код.

THIS_IS_AN_ARRAY = [1,2,3,4]

После этого вы сможете получить доступ к THIS_IS_AN_ARRAY по всему вашему приложению.

4 голосов
/ 17 марта 2011

Вы можете создать простой класс, чтобы хранить эту информацию для вас. Например, вы можете добавить следующее в config / initializers / my_keep.rb:

class MyKeep
  def self.the_array
    @@the_array ||= # Execute the SQL query to populate the array here.
  end

  def self.add element
    if @@the_array
      @@the_array << element
    else
      @@the_array = [element]
    end
  end
end

В вашем приложении при первом вызове MyKeep.the_array массив будет заполнен из базы данных, так что вы даже можете сделать это в том же файле или в блоке after_initialize в файле application.rb. Затем вы сможете добавить массив с помощью MyKeep.add(element) и получить значение массива с помощью MyKeep.the_array. Этот класс не должен переустанавливаться при каждом запросе.

1 голос
/ 17 марта 2011

Вы можете использовать файл конфигурации yaml.

Посмотреть это Railscast

http://railscasts.com/episodes/85-yaml-configuration-file

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...