Rails: установить общую переменную экземпляра для нескольких действий контроллера

Как иметь несколько разных действий контроллера для установки общей переменной экземплярадля использования в шаблонах нопосле запуска действия.

Другими словами, я хочу, чтобы это работало в моем application_controller.

class ApplicationController < ActionController::Base
  after_filter :set_something_common

  def set_something_common
    # All controllers' actions have queried the DB and set @foo for me...
    @bar = some_calculation_on(@foo)
    # ... and all templates expect @bar to bet set.
  end
end

Этотне работает потому чтоafter_filter работает после рендеринга. Хорошо. Но каков правильный образец?

Опять же, важно, чтобыset_something_common запускается после действия, потому что эти действия выполняют специфические для конкретного случая вещи; но они все готово@foo.

Ни одна из моих идей не кажется идеальной:

Вызовset_something_common() к основанию каждого действия, которое нуждается в этом.

Рефакторинг кода для каждого конкретного контроллера вcase_specific_code() и заставить их бежать по порядку:

before_filter :case_specific_code, :set_something_common

Подклассapplication_controller и переопределитьindex метод.

есть идеи? Благодарю.

Изменить: ответ Мэтью побудил меня уточнить:

Несколько контроллеров index () все выполняют разбиение на страницы, каждый из которых принимает параметры@offset а также@limit (через глобальныйbefore_filter) для просмотра срезов данных. Отлично. Теперь я хочу, чтобы общий метод вычислял URL RESTful для ссылки «следующий фрагмент». Я был рад видеть, чтоurl_for() генерирует URL, возвращающийся к тому же ресурсу, поэтому я попытался:

def set_something_common # really called set_next_url, truth be told
  @next_url = url_for(:offset => @offset + @limit, :limit => @limit)
end

Я попробую исправление обезьян Fixnum, чтобы я мог сделать что-то вроде@offset.next_url_for(self, @limit) из шаблона, но я не уверен, будет ли это работать. Если подумать, если я собираюсь изменить шаблоны, я могу также настроить помощника приложения. Я до сих пор не уверен, что это лучшее решение.

Обновление: Принятый ответ - «использовать помощника».

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

Ответы на вопрос(3)

Ваш ответ на вопрос