2012-04-29 15 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

​​

あなたはそれを呼び出す配列を返しますeachmapは新しい配列を返し、ブロックに従ってEnumerableの各エントリを変換します。

+0

ありがとう!私は 'map'について聞いたことがありません。だから、私はちょうど 'each'を使いました。 – 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

Hmmm ...ほとんど機能しました! 'somestring4'が得られません。ありがとう! – dejay

+0

元の質問では、somestring4のキーのスペルが間違っていることに注意してください。 –

+0

私は「somestring4」が中止されたことにショックを受けました。理論的には、それはバグでしょうか? – dejay

関連する問題