如果之前有过这样的话,我表示歉意;我搜索和搜索但我找不到答案...
我有以下哈希:
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!
答案 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