2012-04-29 3 views
0

나는시나에 해시 데이터 액세스를 시도하고있다 : sinatra에서 해시 데이터에 액세스하려면 어떻게해야합니까?

require 'rubygems' 
require 'sinatra' 

class List 
    def self.items 
    return items = { 

    :something1 => { :attribute1 => "somestring1", :attribute2 => "somestring2" }, 
    :something2 => { :attribute1 => "somestring3", :attribute2 => "somestring4" } 

    } 
    end 
end 

list = List.items 

get '/' do 
    list.each do |name, meta| 
     "#{name}<br>#{meta[:attribute1]}<br>#{meta[:attribute2]}<br><br>" 
    end 
end 

나는시나 각 해시의 해시 데이터를 인쇄하는 데 예상. 그러나 대신 해시를 인쇄했습니다 (아마 list.each이라고했기 때문일 수 있습니다). 콘솔은 puts을 사용할 때 예상되는 결과를 인쇄합니다.

명확히하기 위해, 원하는 결과는 다음과 같습니다

something1 
somestring1 
somestring2 

something2 
somestring3 
somestring4 

어떻게 그냥 변수시나 인쇄를해야합니까?

감사합니다.

답변

1

사용 map를 대신 각각의 :

get '/' do 
    list.map do |name, meta| 
    "#{name}<br>#{meta[:attribute1]}<br>#{meta[:attribute2]}<br><br>" 
    end 
end 

each 반환 당신이 그것을에 전화 배열을. map은 새로운 배열을 반환하여 블록에 따라 Enumerable의 각 항목을 변환합니다.

+0

감사! 나는 '지도'에 대해 들어 본 적이 없다. 그래서 저는 방금'각자 '를 사용했습니다. – dejay

2

이 시도 :

get '/' do 
    s = '' 
    list.each do |name, meta| 
     s << "#{name}<br>#{meta[:attribute1]}<br>#{meta[:attribute2]}<br><br>" 
    end 
    return s 
end 
+0

음 ... 거의 효과가 있습니다. 'somestring4 '를 얻지 못했습니다. 감사! – dejay

+0

원래 질문에서 somestring4에 대한 키 철자가 잘못되었습니다. –

+0

나는 'somestring4'가 중단되었다는 것에 충격을 받았다. 이론적으로 버그일까요? – dejay

관련 문제