El attribute
método de clase de Ohm::Model
define los métodos de acceso y mutación para el atributo nombrado:
def self.attribute(name)
define_method(name) do
read_local(name)
end
define_method(:"#{name}=") do |value|
write_local(name, value)
end
attributes << name unless attributes.include?(name)
end
Así que cuando dices attribute :foo
, obtienes estos métodos gratis:
def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
Podrías usar send
para llamar al método mutador así:
@ohm_obj.send((att + '=').to_sym, val)
Si realmente quieres decir @ohm_obj[att] = val
entonces podría agregar algo como lo siguiente a su OhmObj
clase:
def []=(att, value)
send((att + '=').to_sym, val)
end
Y probablemente también desee la versión accesoria para mantener la simetría:
def [](att)
send(att.to_sym)
end