Como replicar o comportamento de class_inheritable_accessor no Rails 3.

Iniciando com o Rails 3.1,class_inheritable_accessor produz avisos de descontinuação, me dizendo para usarclass_attribute em vez de. Masclass_attribute comporta-se de maneira diferente, de uma maneira importante que demonstrare

Uso típico declass_inheritable_attribute seria uma classe de apresentador, assim:

module Presenter
  class Base
    class_inheritable_accessor :presented
    self.presented = {}

    def self.presents(*types)
      types_and_classes = types.extract_options!
      types.each {|t| types_and_classes[t] = t.to_s.tableize.classify.constantize }
      attr_accessor *types_and_classes.keys
      types_and_classes.keys.each do |t|
        presented[t] = types_and_classes[t]
      end
    end
  end
end

class PresenterTest < Presenter::Base
  presents :user, :person
end

Presenter::Base.presented => {}
PresenterTest.presented => {:user => User, :person => Person}

Mas usandoclass_attribute, as subclasses poluirão seus pais:

Presenter::Base => {:user => User, :person => Person}

Qual não é o comportamento desejado. Existe outro tipo de acessador que se comporta da maneira correta ou preciso mudar completamente para outro padrão? Como devo replicar o mesmo comportamento semclass_inheritable_accessor?

questionAnswers(2)

yourAnswerToTheQuestion