访问在Rails中将保留关键字作为名称的对象值

时间:2010-09-08 07:09:40

标签: ruby-on-rails ruby amazon-web-services

我正在使用ruby-aaws gem访问Amazon AWS API,但是我没有深入了解API或gem的细节,我认为我的问题更具有普遍性。

当我查询API时,我最终会得到“对象数组”,我们称之为item,其中包含API响应。 我可以轻松访问数组中的数据,例如puts item.item_attributes.artist.to_s

现在API返回其标识符是Rails中的保留字的属性,例如格式绑定

这样做:
puts item.item_attributes.format.to_s将返回找不到的方法


puts item.item_attributes.binding.to_s会返回一些像#<Binding:0xb70478e4>这样的对象哈希。

我可以看到这个名字下面有值 puts item.item_attributes.to_yaml

结果yaml中的片段显示艺术家绑定
--- !seq:Amazon::AWS::AWSArray
- !ruby/object:Amazon::AWS::AWSObject::ItemAttributes
__val__:
artist: !seq:Amazon::AWS::AWSArray
- !ruby/object:Amazon::AWS::AWSObject::Artist
__val__: Summerbirds in the Cellar
binding: !seq:Amazon::AWS::AWSArray
- !ruby/object:Amazon::AWS::AWSObject::Binding
__val__: Vinyl

这可能是一个非常简单的解决方案,但我似乎无法找到解决方案。

修改
终于找到了。我想这是因为它是一个对象数组,呃...... puts item.item_attributes[0].binding.to_s

2 个答案:

答案 0 :(得分:0)

您可以使用[]而不是方法名称(可能使用method_missing提供)来访问各个属性。

因此,item.item_attributes[:artist].to_s可能会返回您想要的内容。如果没有,则值得尝试使用'artist'作为密钥。

答案 1 :(得分:0)

终于找到了它。我想这是因为它是一个对象数组,呃...... puts item.item_attributes[0].binding.to_s