循环遍历ruby中的哈希文件

时间:2014-12-13 19:13:16

标签: ruby haml

我的项目目录中有一个文本文件,其中包含网站链接以及徽标的位置。例如:

img1 = {name => "logo1", link => "http://example.com", imgpath => "img/logo1.png"}
img2 = {name => "logo2", link => "http://foobar.com", imgpath => "img/foobar.png"}
img3 = {name => "logo3", link => "http://foobar.com", imgpath => "img/foobar2.png"}

我想要做的是遍历该文本文件以显示每个图像及其链接。我到处搜索过,似乎无法找到一个如何做到这一点的好例子。这是我在页面中到目前为止的for循环:

- File.open("img/logos.txt").readlines.each do |name,link,imgpath|
  .col-sm-6.col-md-4.col-lg-3
    .item-work
      .hover
        %img{:alt => "Image", :src => "img/#{imgpath}"}/
        %a.lightbox-image{:href => "#{link}", :title => "Image"}/
        .overlay
      .info
        %a{:href => "#{name}"} #{name}

我有点接近,页面加载所有徽标,除了图像不在那里,链接与它们相关联。我知道这是因为我没有在我的%img链接和%a标记中正确调用它们,但我似乎无法弄明白。你会怎么建议这样做?

1 个答案:

答案 0 :(得分:1)

#readlines将以字符串形式提供文本文件的每一行。根据你的评论,这可以说是好的:

logos.txt:

logo1,http://example.com,img/logo1.png
logo2,http://foobar.com,img/foobar.png
logo3,http://foobar.com,img/foobar2.png

哈姆尔:

- File.open("img/logos.txt").readlines.each do |line|
  - img = line.split(',').map(&:chomp)
  .col-sm-6.col-md-4.col-lg-3
    .item-work
      .hover
        %img{:alt => "Image", :src => "img/#{img[2]}"}/
        %a.lightbox-image{:href => "#{img[1]}", :title => "Image"}/
        .overlay
      .info
        %a{:href => "#{img[0]}"} #{img[0]}

第二行是创建一个值数组,如下所示:

[1] pry(main)> line
=> "logo1,http://example.com,img/logo1.png\n"
[2] pry(main)> line.split(',').map(&:chomp)
=> ["logo1", "http://example.com", "img/logo1.png"]