2011-02-03 19 views
14
Ben şu anda benim kullanıcı mailler görünümden birinde aşağıdaki yapıyorum

hariç her kayıt sonrasında virgülle öğelerin listesini çıktısı:Raylar - Son

<% @participants.each do |participant| %> 
    <%=participant.user.full_name%> 
<% end %> 

ben hariç her kaydın sonra virgül istiyorum Son olarak, eğer mevcut kaydın son olup olmadığını görmek için bir blok ekleyebilirim, ama çok fazla kod gibi görünüyor. Raylar, sonuncu hariç her kalemden sonra virgül çıkarmak için daha iyi bir yol var mı?

Good: XXXXX, XXXXXX, XXXXX 
Bad: XXX,XXX,XXXX, 

Teşekkür

cevap

29

Sen yapabileceğini Ayrıca Raylar Array sınıfına ekler to_sentence yöntem haline bakmak isteyebilirsiniz

@participants.map{|p| p.user.full_name}.join(",") 

gibi bir şey; otomatik olarak "xxx, yyy ve zzz" gibi şeyler yapmanıza izin verir. Daha karmaşık bir işte

+0

sadece aynı göndermek için oturum açıp oldu ve buna beni yendi. Sadece <% = önce ve%> öğelerini eklemeyi unutmayın. – Joc

18
["Apple", "Orange", "Pie"].join(", ") => "Apple, Orange, Pie" 

:

<% @participants.each do |participant| %> 
    <%= participant.user.full_name %>: <%= participiant.comment %><%= "," unless participiant == @participiants.last %> 
<% end %> 
8

gerçek vaka (partials yararlanacak) daha karmaşık ise, büyük ölçüde kısmi koleksiyonu ile döngü değiştirerek bunu kolaylaştırabilirsiniz:

<%= render :partial => "name", :collection => @participants, :spacer_template => "comma" %> 
3
<% @example.each_with_index do|example,index|%> 
<%=example.name%> 
<%= "," unless @example.size==index+1 %> 
<%end%> 
1

yapabilirsiniz ayrıca do it with css

.list-csv { 
 
\t display: inline; 
 
\t list-style: none; 
 
\t } 
 
\t .list-csv li { 
 
\t display: inline; 
 
\t } 
 
\t .list-csv li:after { 
 
\t content: ", "; 
 
\t } 
 
\t .list-csv li:last-child:after { 
 
\t content: ""; 
 
\t }
<ul class="list-csv"> 
 
\t <li>one</li> 
 
\t <li>two</li> 
 
\t <li>three</li> 
 
\t </ul>