L'attribute
metodo class da Ohm::Model
definisce i metodi di accesso e mutatore per l'attributo denominato:
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
Quindi quando dici attribute :foo
, ottieni questi metodi gratuitamente:
def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
Potresti usare send
per chiamare il metodo mutatore in questo modo:
@ohm_obj.send((att + '=').to_sym, val)
Se vuoi davvero dire @ohm_obj[att] = val
quindi potresti aggiungere qualcosa come il seguente al tuo OhmObj
classe:
def []=(att, value)
send((att + '=').to_sym, val)
end
E probabilmente vorresti che anche la versione di accesso mantenga la simmetria:
def [](att)
send(att.to_sym)
end