迭代HAML中的ruby哈希数组

时间:2014-09-26 06:56:20

标签: ruby sinatra haml

我有一系列哈希,我将其传递给HAML页面。

array = [{"name" => "a", "age" => 1}, {"name" => "b", "age" => 2}]

我想迭代并显示这些信息。我试过这个

#{locals[:array]}.each do |#{:value}|
%h2 #{:value["name"]}

但它不起作用。只显示整个哈希的值。如何迭代并显示这些元素?

在伪代码中,我想执行以下操作:

for each element in array:
print element["name"] // I want to display this information in different HTML tags.
print element["age"]

更新:这是我的HAML文件。

!!!
%html
  %head
    %link{:href => "css/batchscreen.css", :rel => "stylesheet", :type => "text/css"}/
  %body
    .container
      locals[:array].each do |element|
      .story
        %h2 Name: #{element['name']}

2 个答案:

答案 0 :(得分:2)

以下应该这样做:

- array.each do |elem|
  %h2 name : #{elem["name"]}, age: #{elem["age"]}

答案 1 :(得分:2)

你的问题是你使用 String Interpolation #{},它接受​​大括号中的任何内容并从中产生一个String(我相信调用to_s) 。使用“each”,您需要迭代String。与|#{:value}|相同。

底线:仅当您想在String(字符序列)中包含某些内容时才使用#{}

在您的情况下,您希望在haml模板中编写以下内容(请注意您需要正确缩进)

- locals[:array].each do |element|
  %h2 Name: #{element['name']}, Age: #{element['age']}

此外,考虑使用哈希键的符号,如

array = [{:name => "a", :age => 1}, {:name => "b", :age => 2}]

甚至(使用较新版本的ruby)

array = [{name: "a", age: 1}, {name: "b", age: 2}]

然后相应调整标题(%h2)中的字符串插值(它变成#{element[:name]}