Rails: establezca una variable de instancia común en varias acciones del controlador

¿Cómo se deben tener varias acciones de controlador diferentes para establecer una variable de instancia comúnpara usar en plantillas pero después de que la acción se ejecute.

n otras palabras, quiero que esto funcione en mi 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

EstaNo funcion porqueafter_filter se ejecuta después del renderizado. Multa. ¿Pero cuál es el patrón correcto?

De nuevo, es importante queset_something_common se ejecuta después de la acción porque esas acciones hacen cosas específicas del caso; pero todos establecieron@foo.

Ninguna de mis ideas parece ideal:

Llamadaset_something_common() hacia el fondo de cada acción que lo necesite.

Refactorice el código específico de caso de todos los controladores encase_specific_code() y obligarlos a correr en orden:

before_filter :case_specific_code, :set_something_common

Subclassapplication_controller y redefinir elindex método.

¿Alguna idea? Gracias

Edit: la respuesta de Matthew me llevó a aclarar:

Varios índices de controladores () todos hacen paginación, cada uno tomando parámetros@offset y@limit (a través de una @ globbefore_filter) para ver segmentos de datos. Excelente. Ahora quiero un método común para calcular una URL RESTful para el enlace "siguiente segmento". Me animaron a ver queurl_for() genera una URL que vuelve al mismo recurso, así que intenté:

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

Intentaré parchear mono Fixnum, así que puedo hacer algo como@offset.next_url_for(self, @limit) de la plantilla, pero no estoy seguro de si funcionará. Ahora que lo pienso, si voy a modificar las plantillas, entonces también podría configurar un asistente de aplicación. Todavía no estoy seguro de cuál es la mejor solución.

Actualización: la respuesta aceptada es "usar un ayudante".

Gracias por las actualizaciones de todos. Aprendí mi lección de que los ayudantes, como las variables globales, están ahí por una razón y no deben evitarse cuando son claramente beneficiosos y concisos.

Respuestas a la pregunta(6)

Su respuesta a la pregunta