Rails - вывод списка элементов с запятой после каждой записи, за исключением последней
Я делаю следующее прямо сейчас в одном из моих представлений почтовой программы:
<% @participants.each do |participant| %>
<%=participant.user.full_name%>
<% end %>
Мне нужна запятая после каждой записи, кроме последней, я полагаю, что я мог бы добавить блок if, чтобы увидеть, является ли текущая запись последней, но это похоже на много кода. У рельсов есть лучший способ вывода запятой после каждого элемента, за исключением последнего.
Good: XXXXX, XXXXXX, XXXXX
Bad: XXX,XXX,XXXX,
Спасибо
Ответы
Ответ 1
Вы можете сделать что-то вроде
@participants.map{|p| p.user.full_name}.join(",")
Вам также может понадобиться изучить метод to_sentence
, который Rails добавляет к классу Array; он позволяет вам делать такие вещи, как вывод "xxx, yyy и zzz" автоматически.
Ответ 2
["Apple", "Orange", "Pie"].join(", ") => "Apple, Orange, Pie"
в более сложном задании:
<% @participants.each do |participant| %>
<%= participant.user.full_name %>: <%= participiant.comment %><%= "," unless participiant == @participiants.last %>
<% end %>
Ответ 3
Если ваш реальный случай более сложный (будет полезен для частичных), вы можете значительно упростить его, заменив ваш цикл на частичный сбор:
<%= render :partial => "name", :collection => @participants, :spacer_template => "comma" %>
Ответ 4
<% @example.each_with_index do|example,index|%>
<%=example.name%>
<%= "," unless @example.size==index+1 %>
<%end%>
Ответ 5
Вы также можете сделать это с помощью css
.list-csv {
display: inline;
list-style: none;
}
.list-csv li {
display: inline;
}
.list-csv li:after {
content: ", ";
}
.list-csv li:last-child:after {
content: "";
}
<ul class="list-csv">
<li>one</li>
<li>two</li>
<li>three</li>
</ul>