2010-10-07 2 views
1

У меня есть следующие определение переменной:Где я могу хранить рассчитанные значения, которые я использую в своем приложении в Rails?

@monday = (Time.now).at_beginning_of_week 

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

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

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

ответ

1

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

before_filter :load_date 

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

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

@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

Это примерно три контроллера и представления (и я думаю, что только 1 модель) - но я заметил, что я определил его по-разному в трех разных кружевах, поэтому хотел сделать это СУХОЙ. Если бы я положил его в файл/lib, это сработало бы? Будет ли файл иметь имя my_date.rb? – Angela

0

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

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

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

Смежные вопросы