Redis
 sql >> Database >  >> NoSQL >> Redis

Impostazione di un campo dinamico in Ohm / Redis

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