2016-10-19 3 views
3

Мне нужно вернуть ключ с известным value из моей модели.Получить имя атрибута по его значению

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

Этот value будет уникальным. Как получить атрибут? Я задаю правильный вопрос?

В чем разница с этим, пожалуйста?

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

То, что вы просите, дается вам как вы возвращаете имя этого 'ключа' из записи' activerecord' с этим значением –

ответ

4

f является экземпляр Foo класса, который наследует от ActiveRecord::Base, это не Hash экземпляра.

Чтобы получить имя атрибута по его значение (с использованием key), вы должны получить хэш f «s ActiveRecord::AttributeMethods#attributes первый:

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

Какая разница

Для sum: различие в методах экземпляра, определенных в классе объекта.

+1

Wow! Я этого никогда не знал. Я все еще учусь. Итак, 'f.attributes' является хешем? ОК. – Sylar

+1

Не знал, что вы можете это сделать. –

Смежные вопросы