尝试显示来自散列的字段但得到 nil:NilClass 的未定义方法“[]”

Trying to display fields from hash but getting undefined method `[]' for nil:NilClass

我在尝试显示来自 json 已解析哈希的字段时收到错误消息“nil:NilClass 的未定义方法‘[]”。如何获取要显示的 coll_title 数据?

数据来自alinks:

[{
"role"=>"source", 
"relator"=>"dnr", 
"terms"=>[], 
"_resolved"=>{
    "lock_version"=>0, 
    "publish"=>true, 
    "display_name"=>{
        "coll_num"=>"024", 
        "coll_title"=>"Collection Title"
        }
    }
}]

代码:

def display_agents(hash, opts = {})
  html = "<div><small>"
  html << "<ul style='list-style-type:none'>"
  alinks = JSON.parse( hash["json"] )["linked_agents"]
  alinks.each do |_resolved|
    html << "<li>#{_resolved["display_name"]["coll_title"]}</li>"
  end
  html << "</ul>"
  html << "</small></div><div class='clearfix'></div>"
  html.html_safe
end

来电:

<td>
  <% if result['primary_type'] === "resource" or result['primary_type'] === "digital_object" or result['primary_type'] === "accession" %>
      <%= display_agents(result) %>
  <% end %>
</td>

错误:

undefined method `[]' for nil:NilClass

Extracted source (around line #85):

82:         <% end %>
83:         <td>
84:           <% if result['primary_type'] === "resource" or result['primary_type'] === "digital_object" or result['primary_type'] === "accession" %>
85:               <%= display_agents(result) %>
86:           <% end %>
87:         </td>
88:         <%#<td>%>

编辑:添加方法调用和错误显示。

您的 each 块中的 _resolved 是整个哈希,即。对于您的示例数据,它等于:

{
"role"=>"source", 
"relator"=>"dnr", 
"terms"=>[], 
"_resolved"=>{
    "lock_version"=>0, 
    "publish"=>true, 
    "display_name"=>{
        "coll_num"=>"024", 
        "coll_title"=>"Collection Title"
        }
    }
}

你能明白为什么检索 "display_name" 密钥 哈希会返回 nil 吗?

假设您显示的来自链接的数据是 linked_agents 数组(您的问题不是 100% 清楚)- 那么您需要

alinks.each do |agent_link|
  html << "<li>#{agent_link["_resolved"]["display_name"]["coll_title"]}</li>"
end