2011-02-03 11 views
14

que estoy haciendo lo siguiente en este momento en una de mis puntos de vista del anuncio publicitario de usuario:carriles - Emisión de una lista de artículos con una coma después de cada registro excluyendo el último

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

Quiero una coma después de cada registro, excepto para el último, supongo que podría agregar un bloque if para ver si el registro actual es el último, pero parece mucho código. ¿Los rieles tienen una mejor manera de generar una coma después de cada elemento excluyendo el último.

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

Gracias

Respuesta

29

Se podría hacer algo como

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

También es posible que desee ver en el método to_sentence que los carriles se suma a la clase Array; te permite hacer cosas como salida "xxx, yyy, y zzz" automáticamente.

+0

se acaba de iniciar sesión para publicar la misma y que se me adelantó. Solo recuerde agregar <% = before and%> after. – Joc

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

de trabajo más complejo:

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

Si su caso real es más complicada (se beneficiarían de los parciales), puede enormemente simplificar la TI mediante la sustitución de su lazo con una colección parcial:

<%= 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

también puede 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>

Cuestiones relacionadas