Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Configurando um campo dinâmico em Ohm / Redis


O attribute método de classe de Ohm::Model define os métodos acessador e modificador para o atributo nomeado:
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

Então, quando você diz attribute :foo , você obtém esses métodos gratuitamente:
def foo         # Returns the value of foo.
def foo=(value) # Assigns a value to foo.

Você pode usar send para chamar o método mutator assim:
@ohm_obj.send((att + '=').to_sym, val)

Se você realmente quer dizer @ohm_obj[att] = val então você pode adicionar algo como o seguinte ao seu OhmObj aula:
def []=(att, value)
    send((att + '=').to_sym, val)
end

E você provavelmente gostaria que a versão do acessador também mantivesse a simetria:
def [](att)
    send(att.to_sym)
end