2016-10-19 1 views
3

Ich muss den Schlüssel mit einem bekannten value von meinem Modell zurückgeben.Erhalten Sie Attributsname durch seinen Wert

f = Foo.find_by(name: "dave") 
#= returned object: {id: 1, name: "dave", age: 32} 
f.key("dave") # expected :name or name 

Diese value wird einzigartig sein. Wie bekomme ich das Attribut? Frage ich die richtige Frage?

Worin besteht der Unterschied?

hash = { "a" => 100, "b" => 200, "c" => 300, "d" => 300 } 
hash.key(200) #=> "b" 
+0

Was Sie fragen, ist der Wert, den Sie geben, wie Sie den Namen dieses 'Schlüssel' aus einem' activerecord' Datensatz mit diesem Wert zurückgeben –

Antwort

4

f ist eine Instanz Foo-Klasse, die von ActiveRecord::Base erbt, ist es nicht eine Hash Instanz ist.

Um den Namen des Attributs zu erhalten, indem er Wert (mit key) ist, müssen Sie f einen Hash bekommen ‚s ActiveRecord::AttributeMethods#attributes zuerst:

f.attributes.key('dave') # `attributes` method returns a Hash instance 
#=> "name" 

Was ist der Unterschied

ist

zu sum up: der Unterschied in den Instanzmethoden, die in der Objektklasse definiert sind.

+1

Wow! Ich habe das niemals gewusst. Ich lerne immernoch. Also 'f.attributes' ist der Hash? OK. – Sylar

+1

Wusste nicht, dass Sie das tun könnten. –

Verwandte Themen