2011-02-03 60 views
14

我做在我的用戶郵件視圖中的一個,現在下面的每個記錄之後輸出的項目列表用逗號:Rails的 - 不包括最後

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

我想除了每個記錄後一個逗號最後,我想我可以添加一個if塊來查看當前記錄是否是最後一個,但是這看起來像很多代碼。除了最後一項之外,導軌是否有更好的方式輸出逗號。

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

感謝

回答

29

你可以做類似

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

您可能還需要尋找到了to_sentence方法Rails添加到Array類;它可以讓你自動執行諸如輸出「xxx,yyy和zzz」之類的內容。

+0

剛剛登錄後相同的,你打我吧。請記住在之後添加<%= before和%>。 – Joc 2011-02-03 22:15:25

18
["Apple", "Orange", "Pie"].join(", ") => "Apple, Orange, Pie" 
在更復雜的工作

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

如果您的實際情況更爲複雜(將從諧音受益),您可以極大地通過與部分集合取代你的循環簡化它:

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

您還可以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>