1

我正在尝试访问 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

我希望 sinatra 打印每个散列的散列数据。但是,它只打印了哈希值(可能是因为我调用了list.each)。当我使用puts.

为了澄清,期望的结果是:

something1
somestring1
somestring2

something2
somestring3
somestring4

如何让 sinatra 只打印变量?

谢谢!

4

2 回答 2

4

试试这个:

get '/' do
   s = ''
   list.each do |name, meta|
      s << "#{name}<br>#{meta[:attribute1]}<br>#{meta[:attribute2]}<br><br>"
   end
   return s
end
于 2012-04-29T01:54:25.487 回答
2

使用map而不是each,然后加入结果以返回一个字符串:

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

each返回您调用它的数组。map将返回一个新数组,根据您的块转换 Enumerable 中的每个条目。

于 2012-04-29T01:56:55.533 回答