sql >> Base de Datos >  >> NoSQL >> Redis

Configuración de un campo dinámico en Ohm / Redis

El attribute método de clase de Ohm::Model define los métodos de acceso y mutación para el atributo nombrado:

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

Así que cuando dices attribute :foo , obtienes estos métodos gratis:

def foo         # Returns the value of foo.
def foo=(value) # Assigns a value to foo.

Podrías usar send para llamar al método mutador así:

@ohm_obj.send((att + '=').to_sym, val)

Si realmente quieres decir @ohm_obj[att] = val entonces podría agregar algo como lo siguiente a su OhmObj clase:

def []=(att, value)
    send((att + '=').to_sym, val)
end

Y probablemente también desee la versión accesoria para mantener la simetría:

def [](att)
    send(att.to_sym)
end