Redis
 sql >> Base de données >  >> NoSQL >> Redis

Réglage d'un champ dynamique en Ohm/Redis

L'attribute méthode de classe de Ohm::Model définit les méthodes d'accès et de mutation pour l'attribut nommé :

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

Donc, quand vous dites attribute :foo , vous bénéficiez gratuitement de ces méthodes :

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

Vous pouvez utiliser send pour appeler la méthode mutator comme ceci :

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

Si vous voulez vraiment dire @ohm_obj[att] = val alors vous pouvez ajouter quelque chose comme ce qui suit à votre OhmObj classe :

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

Et vous voudriez probablement que la version de l'accesseur conserve également la symétrie :

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