2

这是我第一次使用 Ruby,所以我可能会错误地处理这个问题。

我正在尝试通过哈希来显示它的内容。当我浏览哈希时,我需要测试一个键是否存在,比如city。如果城市不存在,则不应显示地址。这是我开始构建哈希的地方:

# app.rb
set :haml, :format => :html5
get "/" do
    @users = Hash[
                  [["name", "bill"], ["city", "nyc"],  ["address", "street"]],
                  [["name", "ted"], ["city", "denver"]],
                  [["name", "sam"], ["address", "road"]]
                 ]
    haml :index
end

这就是我循环哈希的方式:

# layout.haml
- @users.each do |user|
    - user.each do |u|
        - u.each do |b|
            = b

一旦我到达 b 它将显示所有内容,如下所示:

["name", "bill"]
["city", "nyc"]
["address", "street"]
["name", "ted"]
["city", "denver"]

在循环中,如何显示名称以及检查每个用户的地址是否存在以确定是否应显示城市以及可能需要添加的任何标记?理想情况下,它会显示如下内容:

<p>bill, <span class="address">nyc, street</span></p>
<p>ted</p>
<p>sam, <span class="address">road</span></p>

我是否以这种方式正确创建哈希?

4

1 回答 1

4

与其尝试在散列中使用嵌套数组,不如使用包含user散列的数组:

@users = [
           { :name => 'bill', :city => 'city', :address => 'street' },
           { :name => 'ted', :city => 'denver' },
           { :name => 'sam', :address => 'road' }
         ]

有了它,你可以做这样的事情:

- @users.each do |user|
    = user[:name]
    - if user.has_key?(:address) && user.has_key?(:city)
        = "#{user[:address]}, #{user[:city]}"
    - elsif user.has_key?(:address)
        = "#{user[:address]}"
于 2012-05-31T03:51:40.163 回答