Рельсы 3.2.6. У меня следующая комбинация контроллера вида (упрощенный, в действительности присвоение результатов некоторых модельных вызовов):Рельсы 3: обеспечить вызов метода контроллера из вида
ApplicationController
:
def set_menu_vars
@var1 = 1
@var2 = 2
end
SomeController < ApplicationController
:
def some_action
set_menu_vars
end
соответствующих (частичные, общих) вид (haml):
- if @var1 > 0
%p= @var1
Таким образом, fa r так хорошо, пока я не забуду в каком-то действии, чтобы позвонить set_menu_vars
- теперь я получаю исключение undefined method '>' for nil:NilClass
. Это вполне понятно, и я хочу убедиться, что если это частичное представление используется, set_menu_vars
называется автоматически.
Поэтому я стараюсь изменить вид, как
- @controller.set_menu_vars
...
(Гугл), но получить аналогичное исключение, говоря, что @controller
является nil
. Ну, эти ответы, похоже, для Rails 2, видя. Я пытался изменить к
- controller.set_menu_vars
...
Теперь set_menu_vars
называется успешно, но @var1
еще в представлении nil
.
Итак, вопрос в том, каков правильный способ выполнить задачу? Имейте метод в контроллере для каждой из этих переменных (ищите переменную экземпляра, чтобы заставить вызов моделировать не более одного раза)? Или каким-то другим способом?
UPD: рассматриваемый частичный вид не имеет прямого отношения к контроллеру и его действию. Это логически является частью макета (панель мониторинга показывает ссылки на группы задач, которые могут потребовать внимания). Поэтому очень естественно забыть позвонить set_menu_vars
в несколько if
ветвей среди примерно половины действий контроллера. С другой стороны, set_menu_vars
выполняет несколько не столь коротких запросов к базе данных, поэтому я хочу, чтобы он вызывался тогда и только тогда, когда это необходимо (то есть, если рассматриваемое представление действительно отображается).
Да, вы неправильно поняли мой вопрос, возможно, потому, что я недостаточно ясно спрашиваю его. См. UPD, пожалуйста. –