Где я должен хранить рассчитанные значения, которые я использую в своем приложении в Rails? - PullRequest
1 голос
/ 07 октября 2010

У меня есть следующее определение переменной:

@monday = (Time.now).at_beginning_of_week

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

Где я могу определить его (и как я должен его определить - @@?), Чтобы я мог определить его один раз и использовать во всем приложении Rails?

Должно ли оно быть в environment.rb?Должно ли это быть @@?

Ответы [ 2 ]

1 голос
/ 07 октября 2010

Я бы добавил его в контроллер приложения:

before_filter :load_date

def load_date
  @monday =  (Time.now).at_beginning_of_week
end

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

@models = MyModel.before_date(@monday)

Я не думаю, что вам нужен только один экземпляр этой переменной для всего приложения.Инициализировать это довольно просто.Также это не хорошо, когда вы инициализируете его и не используете его.Мне трудно представить, что вам это нужно во всех ваших контроллерах и действиях.

Другой способ - вы можете определить класс:

class MyDate
  def self.get_monday
    Time.now.at_beginning_of_week
  end
end

и вставить его в config/initializers(вероятно, есть лучшее место, где его можно поставить).Затем вы можете получить к нему доступ из любого места в вашем приложении:

MyDate::get_monday
0 голосов
/ 07 октября 2010

Определение этого значения с помощью environment.rb не то, что вы хотите, потому что значение будет рассчитываться при запуске сервера и останется неизменным после этого.Если вы хотите, чтобы значение обновлялось каждую неделю, это проблема.

Я бы пошел с переменной класса (@@) в ApplicationController.Но это не доступно в модели.

Что вы можете сделать, это создать новый модуль, определить это значение в этом модуле и смешать этот модуль в любом контроллере или модели, которым это необходимо.Таким образом, вы получите MyModule::start_of_week со значением.Просто убедитесь, что это значение устанавливается при каждом запросе.

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