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
?