L'attribute
méthode de classe de Ohm::Model
définit les méthodes d'accès et de mutation pour l'attribut nommé :
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
Donc, quand vous dites attribute :foo
, vous bénéficiez gratuitement de ces méthodes :
def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
Vous pouvez utiliser send
pour appeler la méthode mutator comme ceci :
@ohm_obj.send((att + '=').to_sym, val)
Si vous voulez vraiment dire @ohm_obj[att] = val
alors vous pouvez ajouter quelque chose comme ce qui suit à votre OhmObj
classe :
def []=(att, value)
send((att + '=').to_sym, val)
end
Et vous voudriez probablement que la version de l'accesseur conserve également la symétrie :
def [](att)
send(att.to_sym)
end