2013-04-16 30 views
0

我想解析一個XML與Nokogiri在我的Rails項目。Nokogiri,而

這是我的控制器:

def landeplatz 
    require 'nokogiri' 
    doc = Nokogiri::XML(File.open("#{Rails.root}/public/moredata.xml")) 
    @links = doc.xpath('//markers/marker').map do |i| { 
     'title' => i.attr('title'), 
     'desc' => i.attr('desc'), 
     'email' => i.attr('email'), 
     'website' => i.attr('website'), 
     'address' => i.attr('address'), 
     'type' => i.attr('type') 
     } 
    end 
end 

這是我的看法:

<% @links.each do |l| %> 
    <% while l['type'] = 'bildung' %> 
     <div class="span4 lande-item"> 
      <h4><%= l['title'] %></h4> 
     </div> 
    <% end %> 
<% end %> 

<% @links.each do |l| %> 
    <% while l['type'] = 'wirtschaft' %> 
     <div class="span4 lande-item"> 
      <h4><%= l['title'] %></h4> 
     </div> 
    <% end %> 
<% end %> 
.... 

我沒有看到任何物品時,我加入while循環。 有誰知道問題在哪裏?

+1

你能張貼XML的一個片段太 – Nath

+0

而L [「型」] =「教化」,應該==(雙等於) – Nath

回答

2
  1. 一種可能性是您的@links變量是一個空數組。在這種情況下,你的塊都不會被評估。

  2. 在你的while循環條件下,謹防=而不是==。這將導致無限循環,因爲賦值將始終返回真值。

  3. 有更多的慣用方式來執行你想要的。例如:

    <% @links.select{|link| 'bildung' == link['type']}.each do |link| %> 
        <div class="span4 lande-item"> 
        <h4><%= link['title'] %></h4> 
        </div> 
    <% end %> 
    

    或使用group_by

    <% @links.group_by{|link| link['type']}['bildung'].each do |link| %> 
        <div class="span4 lande-item"> 
        <h4><%= link['title'] %></h4> 
        </div> 
    <% end %> 
    

    還有很多其他的方式,全部採用慣用的紅寶石塊。 在ruby中,很多對象實現了each方法,並充分利用了Enumerable module的力量:學習如何使用這個模塊的方法,並且幾乎不需要使用while循環。

+0

不幸的是,紅寶石DOC今日(哇!),所以鏈接斷開到'Enumerable'將不起作用。這裏是另一個:http://apidock.com/ruby/Enumerable –

+0

感謝您的幫助解釋!現在它就像一個魅力,它應該如何工作! – mrks