【问题标题】:Iterating through ruby array of hashes in HAML遍历 HAML 中的 ruby​​ 哈希数组
【发布时间】:2014-11-21 02:54:57
【问题描述】:

我有一组要传递给 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']}

【问题讨论】:

    标签: ruby sinatra haml


    【解决方案1】:

    您的问题是您使用 String Interpolation #{},它将大括号中的任何内容取出并从中生成一个字符串(我相信调用 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}]
    

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

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

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

    【讨论】:

    • 对不起我的愚蠢问题,我已经用我的 haml 文件更新了这个问题。我在你的代码意思之前收到错误undefined local variable or method element'. What is the -`?我必须把它放在代码中吗?
    • 它在你的 haml 模板中执行 ruby​​ 代码 (haml.info/docs/yardoc/file.REFERENCE.html#running_ruby_)
    【解决方案2】:

    以下应该这样做:

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

    【讨论】:

    • 我收到以下错误 undefined local variable or method `elem' for # 并且 array 在 HAML 的 locals 部分中,所以我使用 #{locals[:array]}.each do |elem| 而不是 array.each do |elem|
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2018-09-25
    • 2016-09-03
    • 2012-08-22
    相关资源
    最近更新 更多