我有一系列哈希,我将其传递给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']}
答案 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]}
。