2011-06-29 9 views
6

Modelimdeki bir tabloyu bir tablo şeklinde görüntülemeye çalışıyorum, ancak dinamik olarak satır ve sütunları oluşturmaya çalışırken çok zorlanıyorum.Ruby/Rails - Değişken hücre sayısı için dinamik olarak bir tablo oluşturun

Resimler adlı bir modelim var ve şu anda bunların tümünü bir looooong listesinde görüntülüyorum.

<% for picture in @pictures %> 
    <p><%= image_tag(picture.url) %></p> 
<% end %> 

Bunu raylarla görüntüdeki tabloya nasıl dönüştürebilirim?

<table> 
<tr> 
<% for picture in @pictures %> 
    <td> 
     <%= image_tag(picture.url) %> 
    </td> 
** Here's where I'm confused..How can I write after 6 cells create a new row?? ***** 
<% end %> 
</table> 

Yani soru gerçekten nasıl dağılmasından görünümü içinde bu tür verileri ilgilidir.

cevap

11

".each_slice" sayısız yöntemine bakın. Bununla beraber

http://www.ruby-doc.org/core/classes/Enumerable.html#M001514

sen çizgisinde bir şeyler yapabilir: Bazı güzel son satırı doldurmak için işe yaramaz yapmak gerekebilir

<table> 
    <% @pictures.each_slice(6) do |slice| %> 
    <tr> 
     <% slice.each do |picture| %> 
     <td> 
      <%= image_tag(picture.url) %> 
     </td> 
     <% end %> 
    </tr> 
    <% end %> 
</table> 

, ama bu yolda size almalısınız. ,

bir sayım tutun: eğer değilse, burada ben bir düşük seviyeli php geliştirici olarak benim geçmiş hayatında düzen bu tür yaklaştı ettik nasıl -

+1

http://apidock.com/rails/Array/in_groups_of ben yakut/raylar bu satırlar boyunca bir şey olması gerekiyordu biliyordu. Bunu yapmak zorunda değildim, bu yüzden araştırmayı hiç yapmadım. –

+0

Bu, cevabımdan daha güzel görünüyor! Çok daha okunabilir. – drummondj

0

Ben rayların üzerinde emin yakut bunun için bazı yardımcıları vardır değilim modülo 6 (yani i = (i + 1)% 6). I == 0 ise, < tr çıkışını> </tr> yapın.

Yani, gibi bir şey:

<% i = 0 %> 
<tr> 
    <% 
    @pictures.each do |picture| 
     i = (i + 1) % 6 
    %> 
    <%= '<tr></tr>' if i == 0 %> 
    <td> 
     <%= image_tag(picture.url) %> 
    </td> 
    <% end %> 
</tr> 
+0

Bu yaklaşımı kullanırsanız, "i" değerini ayarlamak yerine, her_with_index yöntemini kullanabilirsiniz. – Pavling

0

böyle% (modül), bir şey kullanırsınız:

<table> 
    <% rows = 0 %> 
    <% @pictures.each do |picture| %> 
    <%= "<tr>" if rows % 6 %> 
    <td><%= image_tag(picture.url) %></td> 
    <% rows += 1 %> 
    <%= "</tr>" if rows % 6 %> 
    <% end %> 
    <%= "</tr>" unless rows % 6 %> 
</table> 
1

Gerçekten each_slice çözüm kazmak. Sekmeli olmayan bir görünüme sahip olmak istiyorsanız, resimleriniz için maksimum genişlik ve maksimum yüksekliğinizi bulabilir ve fotoğraflarınızın etrafında bir kapsayıcıyı ayarlayabilir ve hepsini birlikte süzmek için css kullanabilirsiniz. Her satır, içerdiği çok sayıda ilaca sahip olacaktır.

görünüm

<% for picture in @pictures %> 
    <div class="photo"> 
    <%= image_tag(picture.url) %> 
    </div> 
    <div class="float_clear"></div> 
<% end %> 

css

.photo {height: 150px; width: 150px; float:left;margin:0 10px; 10px 0;} 
.photo img{max-height: 150px; max-width: 150px;} 
.float_clear{clear:both;} 
+1

Katılıyorum, bu sorulan soruya cevap vermiyor.Ama muhtemelen html ve duyarlı düzen açısından en doğru olan çözümü sağlar. – jonas

+0

Teşekkürler @jonas! Varsa, tablolar düzeni için kullanılmamalıdır. Eminim, web görünümleri mobil cihazlarda daha fazla talep edildiğinden, en iyi uygulamaları takip ederken bunu yapmanın bir çok farklı yolu vardır. –

0

raylar içinde bunu yapmanın başka güzel bir yolu yöntemi in_groups_of kullanıyor.

Yani İşte o yöntem için dokümantasyon var

<table> 
    <% @pictures.in_groups_of(6, false) do |group| %> 
    <tr> 
     <% group.each do |picture| %> 
     <td> 
      <%= image_tag(picture.url) %> 
     </td> 
     <% end %> 
    </tr> 
    <% end %> 
</table> 

olabilir:

İlgili konular