Доступ к значениям объекта, которые зарезервировали ключевые слова в качестве имен в Rails - PullRequest
1 голос
/ 08 сентября 2010

Я получаю доступ к API Amazon AWS с помощью гема ruby-aaws, но, не вдаваясь в подробности об API или геме, думаю, что моя проблема носит более общий характер.

КогдаЯ запрашиваю API, в итоге получаю «массив объектов», назовем его item, содержащий ответ API.Я могу легко получить доступ к данным в массиве, например, puts item.item_attributes.artist.to_s

. Теперь API возвращает атрибуты, идентификаторы которых являются зарезервированными словами в Rails, например, format или binding .

Таким образом:
puts item.item_attributes.format.to_s вернет метод не найден

, в то время как
puts item.item_attributes.binding.to_s вернет некоторый хеш объекта, например #<Binding:0xb70478e4>.

Я вижу, что есть значения под этим именем при выполнении
puts item.item_attributes.to_yaml

Фрагмент из полученного yaml шоу Artist и привязки :
--- !seq:Amazon::AWS::AWSArray<br> - !ruby/object:Amazon::AWS::AWSObject::ItemAttributes<br> __val__:<br> artist: !seq:Amazon::AWS::AWSArray<br> - !ruby/object:Amazon::AWS::AWSObject::Artist<br> __val__: Summerbirds in the Cellar<br> binding: !seq:Amazon::AWS::AWSArray<br> - !ruby/object:Amazon::AWS::AWSObject::Binding<br> __val__: Vinyl

Возможно, это было очень подробное объяснение с очень простым решением, но я не могу найти решение.

edit
Наконец-то нашел.Я думаю, это потому, что это массив объектов, да ... puts item.item_attributes[0].binding.to_s

Ответы [ 2 ]

0 голосов
/ 12 сентября 2010

Наконец-то нашел.Я думаю, это потому, что это массив объектов, да ...
puts item.item_attributes[0].binding.to_s

0 голосов
/ 08 сентября 2010

Вы можете получить доступ к отдельным атрибутам, используя [] вместо имени метода (которое, вероятно, в любом случае предоставляется с помощью method_missing).

Таким образом, item.item_attributes[:artist].to_s может вернуть то, что вы хотите,Если этого не произойдет, стоит вместо этого использовать 'artist' в качестве ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...