2012-02-18 7 views
1

이전에 다루었다면 사과드립니다. 나는 검색 및 검색하지만 난 다음 해시를 가지고 답변 ...레일상의 루비에서 해시로 작업하기

찾을 수 없습니다 :

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

내가 추출 라인 당 values-를 표시 할을. 레일 콘솔에서 실행할 때 올바른 결과를 얻을 수 있습니다.

>> 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}] 

질문 : 어떻게하면 레일즈 응용 프로그램에서이 동작을 복제 할 수 있습니까? 다음 방법을 시도했지만 브라우저에서 반환되는 값은 하나뿐입니다.

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!

답변

3

return은 첫 번째 요소 다음에 루프를 종료합니다. 루프에서 출력을 문자열 (뉴 라인 \n 중간 포함)에 추가 한 다음 루프 다음에 해당 문자열을 반환하십시오.

+0

감사합니다. 또한 출력을 문자열에 추가 한 후 브라우저에 올바르게 표시하려면 \ n 및 simpleformat 대신
을 사용해야했습니다. – Hilary

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 
관련 문제