如何访问ruby对象内的数组内的哈希?

时间:2013-10-02 03:42:45

标签: ruby-on-rails arrays mongodb hash rubygems

我正在使用publicactivity gem审核我的应用程序中的活动。

使用MongoDB,以下数据都不是真实的 - 但代表了真实数据。

我推了一些像这样的数据:

"changes" : [
        {
            "oldFirst" : "Aaron2",
            "oldLast" : "Aardvark2",
            "oldCity_id" : "Bogota, TN",
            "oldZip_code" : 38007,
            "oldPhone" : [
                "9993339999",
                "4442224443"
            ],
            "oldStreet1" : "1111 Brighton Clopton St",
            "oldStreet2" : "Suite 100",
            "oldEmail" : [
                "uk@tel.com"
            ],
            "oldType" : "customer",
            "oldLatitude" : "36.1625531",
            "oldLongitude" : "-89.4362431",
            "oldCust_notes" : "",
            "oldAccount_id" : ""
        },
        {
            "newFirst" : "Aaron",
            "newLast" : "Aardvark",
            "newCity_id" : "Brighton, TN",
            "newZip_code" : 38011,
            "newPhone" : [
                "9993338888",
                "4442223334"
            ],
            "newStreet1" : "1111 Brighton Clopton Dr.",
            "newStreet2" : "",
            "newEmail" : [
                "uk@tel.com"
            ],
            "newType" : "customer",
            "newLatitude" : "35.4558615",
            "newLongitude" : "-89.68162079999999",
            "newCust_notes" : "",
            "newAccount_id" : ""
        }
    ]

那么我该如何谈论这些元素?

我试过了:

<%= activity.changes[0]["oldFirst"] %>
<%= activity.changes["oldFirst"] %>
<%= activity.changes.oldFirst %>
<% if activity.changes.any?
  activity.changes.each do |c|
%>
<%= c["oldfirst"] %>
<%end%>
<%end%>

我一直尝试着我所知道的组合 - 而且我得到了这个:

no implicit conversion of String into Integer

String into Integer ?! WTF?这是所有字符串类型的数据,我试图将其作为字符串类型数据访问 - 我不明白为什么它认为我有或想要整数值。

我可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

原来我在数据库中有一个错误的条目,如:

[[{},{}]]

当使用我使用的任何字体将它们全部粉碎在一起时,很难看到终端中的双支架。

一旦删除单个条目并将其余条目留在原位(格式如:[{},{}]),这样就可以了。

activity.changes [0] [ “oldFirst”]

答案 1 :(得分:0)

您在此处发布的是JSON数据结构,而不是Ruby对象。

您必须首先使用JSON解析它,然后您可以通过以下方式访问它:

 require 'json'
 activity = JSON.parse( json_string )
 activity.changes[0]["oldFirst"]