Rails - вывод списка элементов с запятой после каждой записи, исключая последнюю - PullRequest
16 голосов
/ 04 февраля 2011

В настоящее время я выполняю следующие действия в одном из представлений моей почтовой программы:

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

Мне нужна запятая после каждой записи, кроме последней, я полагаю, я мог бы добавить блок if, чтобы увидеть, является ли текущая запись последней, но это похоже на большой код. Есть ли у рельсов лучший способ выводить запятую после каждого элемента, кроме последнего.

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

Спасибо

Ответы [ 5 ]

31 голосов
/ 04 февраля 2011

Вы можете сделать что-то вроде

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

Вы также можете захотеть взглянуть на метод to_sentence, который Rails добавляет в класс Array;он позволяет автоматически выполнять такие операции, как вывод "xxx, yyy и zzz".

19 голосов
/ 04 февраля 2011
["Apple", "Orange", "Pie"].join(", ") => "Apple, Orange, Pie"

в более сложной работе:

<% @participants.each do |participant| %>
  <%= participant.user.full_name %>: <%= participiant.comment %><%= "," unless participiant == @participiants.last %>
<% end %>
8 голосов
/ 04 февраля 2011

Если ваш фактический случай более сложный (выиграл бы от частичных), вы можете значительно упростить его, заменив цикл частичным сбором:

<%= render :partial => "name", :collection => @participants, :spacer_template => "comma" %>
3 голосов
/ 23 июня 2015
<% @example.each_with_index do|example,index|%>
 <%=example.name%>
 <%= "," unless @example.size==index+1 %>
<%end%>
1 голос
/ 28 апреля 2017

Вы также можете сделать это с помощью 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...