如何访问仅存在于1个属性中的哈希值?

时间:2015-06-27 00:56:36

标签: ruby-on-rails arrays ruby ruby-on-rails-4 hash

所以这个有点棘手。

我有一个如下所示的属性:

[22] pry(main)> n.media.meta_info[:response][:outputs]
=> [{"id"=>486,
  "url"=>"http://some-video.com/by-fire.mp4",
  "label"=>"webmp4",
  "state"=>"finished",
  "format"=>"mpeg4",
  "type"=>"standard",
  "frame_rate"=>30.06,
 {"id"=>488848287,
  "url"=>"http://some-video.com/by-fire.webm",
  "label"=>"webwebm",
  "state"=>"finished",
  "format"=>"webm",
  "type"=>"standard",
  "frame_rate"=>30.06,
 {"id"=>488848288,
  "url"=>"http://some-video.com/by-fire.ogv",
  "label"=>"webogv",
  "state"=>"finished",
  "format"=>"ogg",
  "type"=>"standard",
  "frame_rate"=>30.059,
 {"id"=>488848289,
  "url"=>
   "https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/",
  "label"=>nil,
  "state"=>"finished",
  "format"=>"mpeg4",
  "type"=>"standard",
  "frame_rate"=>30.06,
  "thumbnails"=>
   [{"label"=>nil,
     "images"=>
      [{"dimensions"=>"56x100",
        "file_size_bytes"=>15142,
        "format"=>"PNG",
        "url"=>"https://some-video.s3.amazonaws.com/uploads/video/video_file/id/by-fire.png"}]}],
  "md5_checksum"=>nil}]

我正在尝试访问thumbnails信息,特别是缩略图的网址。

我无法弄清楚如何到达那里。

当我尝试使用thumbnails的嵌套哈希键时,它不起作用:

[23] pry(main)> n.media.meta_info[:response][:outputs][:thumbnails]
TypeError: no implicit conversion of Symbol into Integer
from (pry):22:in `[]'

思想?

4 个答案:

答案 0 :(得分:3)

输出开头的[{表示返回了一个数组。首先需要在数组中找到包含thumbnails键的元素:

outputs = n.media.meta_info[:response][:outputs]
output_with_thumbnail = outputs.find { |elem| elem.keys.include?('thumbnails') }

然后继续这样:

output_with_thumbnail['thumbnails']

答案 1 :(得分:2)

如果您只是想找到缩略图,而不关心其余的输出,可以像#find一样使用{/ p>}:

thumbnails = n.media.meta_info[:response][:outputs].find {|it| it[:thumbnails] }[:thumbnails]

答案 2 :(得分:1)

你有一系列哈希,thumbnails在第三个:

n.media.meta_info[:response][:outputs][3][:thumbnails]

答案 3 :(得分:1)

看起来像是

outputs = n.media.meta_info[:response][:outputs]

是哈希的Array。所以,你需要首先迭代它们:

outputs.each do |output|
  # deal with each output here
end

您可以像这样检查:thumbnails

if (thumbnails = output[:thumbnails])
  # we've got thumbnails, deal with it here
end