Как наиболее эффективно выполнить итерацию по хешу в порядке, основанном на значении ключа во внутреннем хеше?
У меня есть JSON-хэш хэшей, возвращаемый API веб-сайта, который я хочу проанализировать и отобразить на основе значения определенного ключа во внутренних хешах.
Я могу думать о решениях, которые бы достигли этого, но они занимали бы несколько строк кода и не казались эффективными. Конечно, должен быть способ изначально в Rails, принимая во внимание соглашение по конфигурации. Я немного погуглил, но не нашел ничего, что охватывало бы эту проблему.
Пример ответа от API:
[{"banner":"01197271","birthday":"1991-01-11","committee_id":1,"created_at":"2012-08-08T01:56:02-05:00","email":"me@example.com","first_name":"Dan","graduation_date":"May 2013","hometown":"San Antonio","hours_enrolled":15,"id":2,"image":{"url":null,"thumb":{"url":null},"large":{"url":null}},"invitation_accepted_at":null,"invitation_limit":null,"invitation_sent_at":null,"invitation_token":null,"invited_by_id":null,"invited_by_type":null,"last_name":"Tester","local_apt":"","local_city":"San Antonio","local_state":"Texas","local_street":"One UTSA Circle","local_zip":"78249","major":"Computer Science","permanent_apt":"","permanent_city":"","permanent_state":"","permanent_street":"One UTSA Circle","permanent_zip":"","phone":"5558813284","same_address":true,"tour_trained":false,"updated_at":"2012-08-17T03:35:26-05:00","utsa_id":"uoi431"},
{"banner":"","birthday":"1990-10-25","committee_id":null,"created_at":"2012-08-03T16:19:23-05:00","email":"you@example.com","first_name":"Test","graduation_date":null,"hometown":null,"hours_enrolled":null,"id":1,"image":{"url":null,"thumb":{"url":null},"large":{"url":null}},"invitation_accepted_at":null,"invitation_limit":null,"invitation_sent_at":null,"invitation_token":null,"invited_by_id":null,"invited_by_type":null,"last_name":"User","local_apt":"","local_city":"","local_state":"","local_street":"","local_zip":"","major":null,"permanent_apt":"","permanent_city":"","permanent_state":"","permanent_street":"","permanent_zip":"","phone":"","same_address":false,"tour_trained":false,"updated_at":"2012-08-15T10:05:54-05:00","utsa_id":""}]
Потенциальным решением было бы пройти через каждый внутренний хеш, определить значение соответствующего значения ключа, а затем сохранить его в зависимости от того, куда его поместило значение ключа по сравнению с уже протестированными хешами. Когда закончите, вернитесь.
2 ответа
Итак, если у вас есть объекты, которые настроены для анализа этой информации, эти объекты могут создавать себя на основе параметров вашего хэша. Таким образом, вы могли бы сделать что-то вроде этого
object = MyObject.create(your_hash_parameters)
куда your_hash_parameters
параметры, которые вы представили в вашем примере.
Я не уверен, что произойдет, если будет больше параметров, чем ваш объект знал, что делать, если он все еще строит сам или нет. Если это так, вы можете использовать delete_if
метод для исключения атрибутов, которые являются нежелательными.
Еще одно замечание: если это не то, что вы хотите сохранить в своей базе данных, а только для отображения временной информации. Я бы настроил модель с attr_accessors
которые представляют атрибуты, которые вы отображаете.
Как сказано в комментарии, я бы создал объект ActiveResource и добавил к нему соответствующие методы.