在轨道上使用红宝石中的哈希值

时间:2012-02-18 01:45:35

标签: ruby hash

如果之前有过这样的话,我表示歉意;我搜索和搜索但我找不到答案...

我有以下哈希:

input = '{"names":[{"name":"a1","id":1},{"name":"b2","id":2}]}'

我想提取并显示值 - 每行一个。当我从rails控制台运行它时,我得到了正确的结果:

    >> r1 = ActiveSupport::JSON.decode(input)
    => {"names"=>[{"name"=>"a1", "id"=>1}, {"name"=>"b2", "id"=>2}]}
    >> r1["names"].each do |x|
    ?> puts "#{x["name"]}"
    >> end
    a1
    b2
    => [{"name"=>"a1", "id"=>1}, {"name"=>"b2", "id"=>2}]

问题是如何在rails应用程序中复制此行为?我尝试了以下方法,但在浏览器中只返回一个值:

    module PageHelper
        def testcall()
        input = '{"names":[{"name":"a1","id":1},{"name":"b2","id":2}]}'
        r1 = ActiveSupport::JSON.decode(input)
        r1["names"].each do |a|
            return "Name: #{a["name"]}\n"
        end
   end

TIA!

2 个答案:

答案 0 :(得分:3)

return在第一个元素之后终止循环。尝试将输出附加到循环中的字符串(包括中间的换行符\n),然后在循环之后返回该字符串。

答案 1 :(得分:0)

正如@Irfy所说,这是因为return陈述而发生的。以下代码有效,

  module PageHelper
    def testcall()
      input = '{"names":[{"name":"a1","id":1},{"name":"b2","id":2}]}'
      r1 = ActiveSupport::JSON.decode(input)
      r1["names"].map{|hash| hash["name"]}
    end
  end