Rails: définissez une variable d'instance commune sur plusieurs actions de contrôleur

Comment doit-on avoir plusieurs différentes controller' ensemble des actions ordinaires de variable d'instance pour une utilisation dans les modèles mais après l'action s'exécute.

En d'autres mots, je veux que cela fonctionne dans mon 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

Ce ne fonctionne pas parce que after_filter s'exécute après le rendu. Des beaux. Mais quel est le bon modèle?

Encore une fois, il est important que set_something_common s'exécute après l'action, car ces actes ne cas spécifique de choses; mais ils ont tous mis @foo.

Aucun de mes idées semblent l'idéal:

  • Appel set_something_common() vers le bas de chaque action qui le nécessite.
  • Refactoriser tous les contrôleurs " -code spécifique dans case_specific_code() et les forcer à exécuter dans l'ordre:
    before_filter :case_specific_code, :set_something_common
  • Sous-classe application_controller et de redéfinir la index méthode.

Toute pensée? Merci.

Edit: Matthieu réponse qui m'a incité à préciser:

Plusieurs contrôleurs' index() tous faire de la pagination, chacun prend des paramètres @offset et @limit (via mondial before_filter) pour afficher les données en tranches. Grand. Maintenant, je veux une méthode commune pour le calcul d'un Réparateur d'URL pour la "prochaine tranche" lien. J'ai été encouragé de voir que url_for() génère une URL de retour à la même ressource, alors j'ai essayé:

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

Je vais essayer monkey patching Fixnum, afin que je puisse faire quelque chose comme @offset.next_url_for(self, @limit) à partir du modèle, mais je ne suis pas sûr si cela va fonctionner. Venez pour penser à elle, si je vais modifier les modèles, alors je peut ainsi configurer une application helper. Je ne sais pas encore quelle solution est la meilleure.

Mise à jour: Accepté la réponse est "utiliser une aide."

Merci pour les mises à jour de tout le monde. J'ai appris ma leçon que les aides, comme les variables globales sont là pour une raison et ne pas être évité lorsqu'elles sont manifestement bénéfique et succincte.

source d'informationauteur JasonSmith