Das attribute
Klassenmethode von Ohm::Model
definiert Accessor- und Mutator-Methoden für das benannte Attribut:
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
Wenn Sie also attribute :foo
sagen , erhalten Sie diese Methoden kostenlos:
def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
Sie könnten send
verwenden um die Mutator-Methode wie folgt aufzurufen:
@ohm_obj.send((att + '=').to_sym, val)
Wenn Sie wirklich @ohm_obj[att] = val
sagen wollen dann könnten Sie Ihrem OhmObj
etwas wie das Folgende hinzufügen Klasse:
def []=(att, value)
send((att + '=').to_sym, val)
end
Und wahrscheinlich möchten Sie auch, dass die Accessor-Version die Symmetrie beibehält:
def [](att)
send(att.to_sym)
end