В рельсах, где поставить константу (переменную?), Которая меняется в зависимости от текущей даты? - PullRequest
2 голосов
/ 03 октября 2010

У меня есть приложение, которое сильно зависит от даты.Существует умеренно дорогой расчет, который необходим для установки этих дат на основе текущей даты.Что касается каждого запроса, эти даты являются константами - они не меняются после создания - но они меняются в течение недели.Даты используются как в контроллерах, так и в моделях.

Моя проблема заключается в следующем:

  • Если бы даты не менялись каждый день, я мог бы установить их в config / initializer.Но инициализаторы оцениваются только при перезапуске сервера
  • , если я установил даты в applicationController с использованием before_filter, даты не будут доступны для моих моделей

Есть идеи?Я смотрю на это все неправильно?Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 октября 2010

Один из способов: создать одноэлементный класс, который при запросе экземпляра проверяет дату.С головы до головы,

class MyDates
  def self.get_instance
    unless @instance && @date == Date.new
      @date = Date.new
      @instance = self.new(@date)
    end
    @instance
  end

  def initialize(date)
    # calculate the expensive stuff
  end
end
1 голос
/ 03 октября 2010

Я думаю, что здесь вы можете использовать кеширование Rails.Посмотрите здесь и здесь для получения более подробной информации и примеров.

По сути, вы можете написать в кеш:

Rails.cache.write('date', Date.today)

и прочитать:

Rails.cache.read('date')

Вы можете использовать его во всем приложении Rails (модели, представления, контроллеры, ...).

Вы можете сохранить любой объект в кеше.Кеширование по умолчанию использует память и доступно для одного экземпляра Rails, однако вы можете использовать другой метод хранения кэша.

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