O
attribute
método de classe de Ohm::Model
define os métodos acessador e modificador para o atributo nomeado: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
Então, quando você diz
attribute :foo
, você obtém esses métodos gratuitamente:def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
Você pode usar
send
para chamar o método mutator assim:@ohm_obj.send((att + '=').to_sym, val)
Se você realmente quer dizer
@ohm_obj[att] = val
então você pode adicionar algo como o seguinte ao seu OhmObj
aula:def []=(att, value)
send((att + '=').to_sym, val)
end
E você provavelmente gostaria que a versão do acessador também mantivesse a simetria:
def [](att)
send(att.to_sym)
end