2012-07-25 83 views
2

我試圖跨越每行從1開始要100使用Ruby創建HTML表格?

我的Ruby代碼做一個表,十個值如下:

<table border="1"> 

    <% (1..100).each do |i| 
    d3 = (i % 3 == 0) 
    d5 = (i % 5 == 0) 

    i = "<b>#{i}</b>" if d5 
    i = "<i>#{i}</i>" if d3 %> 

    <tr> 
     <td><%= i %></td> 
    </tr> 

    <% end %> 
</table> 

我將如何把這個在HTML桌子在10 X 10?

+2

FWIW,當迭代變量是在塊重新分配我不喜歡;我覺得很容易想到。 – 2012-07-25 22:55:10

+2

@DaveNewton它肯定讓我感到困惑 - 我在答案中做了(並修正)了兩個單獨的錯誤。 – 2012-07-25 22:58:01

回答

1
<table border="1"> 

<% (1..100).each do |i| 
    d3 = (i % 3 == 0) 
    d5 = (i % 5 == 0) 

    s = "#{i}" 
    s = "<b>#{i}</b>" if d5 
    s = "<i>#{i}</i>" if d3 %> 

    <% if i % 10 == 1 %><tr><% end %> 
    <td><%= s %></td> 
    <% if i % 10 == 0 %></tr><% end %> 

<% end %> 
</table> 

基本上,要啓動的元件1,11,21等前一個錶行和端部元件10,20,30之後的行,等等

+0

+1使用OP的原始1-100循環,即使這種ERB手動標記生成正是我最近喜歡Haml的原因。 – Phrogz 2012-07-25 22:58:01

+0

美麗!謝謝! – user102825 2012-07-25 23:01:55

+0

@Progrog謝謝!是的,如果我自己做,我更喜歡你的解決方案。正如你所說的,我不想「爲了打擊這個可憐的初學者的頭腦」,我通常更喜歡糾正他們的代碼,而不是重寫它。我很高興你展示了一些更多的慣用和優雅的風格。 – 2012-07-25 23:05:42

2

使用ERB:

<table> 
<%10.times do |row|%> 
    <tr> 
    <%10.times do |col|%> 
     <td><%= 
     i = row*10+col+1 
     if i%5==0 
      "<b>#{i}</b>" 
     elsif i%3==0 
      "<i>#{i}</i>" 
     else 
      i 
     end 
     %></td> 
    <%end%> 
    </tr> 
<%end%> 
</table> 

使用Haml的:

%table 
    - 10.times do |row| 
    %tr 
     - 10.times do |col| 
     %td 
      - i = row*10+col+1 
      = i%5==0 ? "<b>#{i}</b>" : i%3==0 ? "<i>#{i}</i>" : i 
+1

我很可能會在ERB(三元)中做同樣的事情。 – 2012-07-25 22:54:38

+2

@Dave嗯,是的,我不想吹這個可憐的初學者的頭腦:) – Phrogz 2012-07-25 22:55:12

+2

你是一個善良和善良的Phrogz。 – 2012-07-25 22:56:58