2014-09-26 75 views
1

我有一个散列数组,我传递给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"] 

UPDATE:这是我的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

你的问题是,你使用字符串插值#{},这需要无论是在大括号并提出了串出的(调用to_s我相信)。随着“每个”您然后要迭代字符串。 |#{:value}|也一样。

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

在你的情况,你想要写在你的HAML模板下面(注意,你需要正确的缩进)

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

此外,考虑使用符号的散列密钥,如

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

甚至(红宝石的新版本)

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

,然后调整字符串刑警(%h2)(相当于#{element[:name]})。

+0

对不起我的愚蠢问题,我用我的haml文件更新了这个问题。 我得到一个错误'未定义的局部变量或方法'元素''。你的代码之前的'-'是什么意思?我必须把它放在代码中吗? – adijo 2014-09-26 08:49:20

+2

它执行haml模板中的ruby代码(http://haml.info/docs/yardoc/file.REFERENCE.html#running_ruby_) – Felix 2014-09-26 09:04:42

2

以下应该这样做:

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

我得到了以下错误'''未定义的局部变量或方法'elem'for'''而'''array'''在HAML的'''locals'''部分,所以我做了''' '#{locals [:array]}。each do | elem | '''而不是'''array.each do | elem |''' – adijo 2014-09-26 07:05:25