Comenzando con rieles 3.1, class_inheritable_accessor
produce avisos de obsolescencia, diciéndome a utilizar class_attribute
lugar. Pero class_attribute
se comporta de manera diferente de una manera importante que demostraré.¿Cómo puedo replicar el comportamiento de class_inheritable_accessor en Rails 3.1?
Un uso típico de class_inheritable_attribute
sería una clase de presentador, así:
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}
Pero el uso de class_attribute
, subclases contaminará sus padres:
Presenter::Base => {:user => User, :person => Person}
que no se desea el comportamiento en absoluto. ¿Hay otro tipo de acceso que se comporte de la manera correcta, o debo cambiar a otro patrón por completo? ¿Cómo debería replicar el mismo comportamiento sin class_inheritable_accessor
?