Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Setzen eines dynamischen Feldes in Ohm / Redis

Das attribute Klassenmethode von Ohm::Model definiert Accessor- und Mutator-Methoden für das benannte Attribut:

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

Wenn Sie also attribute :foo sagen , erhalten Sie diese Methoden kostenlos:

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

Sie könnten send verwenden um die Mutator-Methode wie folgt aufzurufen:

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

Wenn Sie wirklich @ohm_obj[att] = val sagen wollen dann könnten Sie Ihrem OhmObj etwas wie das Folgende hinzufügen Klasse:

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

Und wahrscheinlich möchten Sie auch, dass die Accessor-Version die Symmetrie beibehält:

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