attribute
метод на клас от Ohm::Model
дефинира методите за достъп и мутатор за посочения атрибут:
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
Така че, когато кажете attribute :foo
, получавате тези методи безплатно:
def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
Можете да използвате send
за да извикате метода на мутатора по следния начин:
@ohm_obj.send((att + '=').to_sym, val)
Ако наистина искате да кажете @ohm_obj[att] = val
тогава можете да добавите нещо като следното към вашия OhmObj
клас:
def []=(att, value)
send((att + '=').to_sym, val)
end
Вероятно бихте искали и версията на аксесоара да поддържа симетрия:
def [](att)
send(att.to_sym)
end