Estoy intentando generar attr_reader a partir de un hash (con hash anidado) para que refleje la creación de la variable de instancia automáticamente.Ruby: generar dinámicamente attribute_accessor
aquí es lo que tengo hasta ahora:
data = {:@datetime => '2011-11-23', :@duration => '90', :@class => {:@price => '£7', :@level => 'all'}}
class Event
#attr_reader :datetime, :duration, :class, :price, :level
def init(data, recursion)
data.each do |name, value|
if value.is_a? Hash
init(value, recursion+1)
else
instance_variable_set(name, value)
#bit missing: attr_accessor name.to_sym
end
end
end
Pero no puedo encontrar una manera de hacer eso :(
¡¡ERES mi nuevo mejor amigo !! eso solo funciona y es tan simple ... Ruby es mágico :) y TÚ eres una estrella :) (Estoy feliz porque lo busqué por un tiempo) –
Solo una pregunta rápida más, ¿hay alguna manera de anteponer el nombre de el hash que contiene el nombre del descriptor, para poder llamar a my_class.class.price, o algo así? –
Antes que nada, 'clase' es una palabra clave reservada, no la use. Su segunda pregunta en su comentario aquí va más allá del alcance de esta pregunta en particular. Es posible que desee comenzar una nueva pregunta, ya que se trata de la recursión y tal, no con acceso de atributos. (PD, no olvides aceptar la mejor respuesta) – rdvdijk