Rails: Defina uma variável de instância comum em várias ações do controlad

Como alguém deve ter várias ações de controlador diferentes para definir uma variável de instância comumpara uso em modelos masapós a ação ser executada.

Em outras palavras, eu quero que isso funcione no meu application_controlle

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

Estenão funcion Porqueafter_filter é executado após a renderização. Bem. Mas qual é o padrão correto?

Novamente, é importante queset_something_common é executado após a ação porque essas ações fazem coisas específicas de caso; mas todos eles definem@foo.

Nenhuma das minhas idéias parece ideal:

Ligarset_something_common() na parte inferior de todas as ações que precisa

Refator todos os códigos específicos de cada caso dos controladores paracase_specific_code() e force-os a executar em ordem:

before_filter :case_specific_code, :set_something_common

Subclassapplication_controller e redefina oindex método.

Alguma ideia? Obrigado

Edit: A resposta de Matthew me levou a esclarecer:

Vários índices dos controladores () fazem paginação, cada um tendo parâmetros@offset e@limit (através de um @ globbefore_filter) para visualizar fatias de dados. Ótimo. Agora, quero um método comum para calcular um URL RESTful para o link "next slice". Fui encorajado a ver queurl_for() gera uma URL retornando ao mesmo recurso, então tentei:

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

Vou tentar fazer o patch do macaco Fixnum, para que eu possa fazer algo como@offset.next_url_for(self, @limit) do modelo, mas não tenho certeza se funcionará. Venha para pensar sobre isso, se vou modificar os modelos, então é melhor configurar um auxiliar de aplicativo. Ainda não tenho certeza de qual é a melhor solução.

Atualização: A resposta aceita é "use um ajudante".

Obrigado pelas atualizações de todos. Aprendi minha lição de que ajudantes, como variáveis globais, existem por uma razão e não devem ser evitados quando são claramente benéficos e sucinto

questionAnswers(6)

yourAnswerToTheQuestion