在Rails的每个循环的最后一次迭代中没有逗号

时间:2014-11-02 03:24:40

标签: ruby-on-rails ruby

我想在Rails中打印出逗号分隔的链接列表。

继承人我所得到的:

<%= topics.each do |topic| %>
   <a href="<%= topic.link %>" ><%= topic.name %></a>
   ,
<% end %>

继承人我想要的东西:

<a href="thing_a">Thing A</a>, 
<a href="thing_b">Thing B</a>,
<a href="thing_c">Thing C</a>

但是现在我在循环的最后一次迭代中得到了一个额外的逗号!我该怎么办?

6 个答案:

答案 0 :(得分:11)

执行此操作的一种方法是使用map然后Array#join

<%= topics.map { |topic| link_to(topic.name, topic.link) }.join(',').html_safe %>

答案 1 :(得分:4)

如果您想对代码进行尽可能少的更改,可以使用以下

<%= topics.each do |topic| %>
  <a href="<%= topic.link %>" ><%= topic.name %></a>
     <% if(topic != topics.last) %>
     ,
     <% end %>
<% end %>

答案 2 :(得分:2)

如何使用each_with_index,只在内容之前加上逗号,除非它不是第一项。

<% topics.each_with_index do |topic, i| %>
   <% if i > 0 %>
   ,
   <% end %>
   <a href="<%= topic.link %>"><%= topic.name %></a>
<% end %>

答案 3 :(得分:1)

我使用concat帮助器在一行调用(用于活动记录集合)中创建了它:

<% concat (',') if e.bills.last != b %>

concat is an ERB helper (TextHelper)添加一些没有<%= %>语法的HTML,有助于添加少量字符。

以下是完整的代码:

<% event.bills.each do |b| %>
   <%= link_to(b.number.to_s, bill_display_path(b)) %>
   <% concat (',') if e.bills.last != b %>
<% end %>

答案 4 :(得分:0)

您可以执行以下操作以打印除最后一项以外的所有项目的逗号:

category    amount    
 A           10
 B           15
 C           20
 D           35
 E           10
 my_total    10

这将检查循环中的当前项目是否为最后一项,并将使用<% topics.each do |topic| %> <%= topic %> <%= "," if topic != topics.last %> <% end %> 语法输出逗号。

答案 5 :(得分:-1)

试试吧。它对我有用

<%= topics.map{|p| p.topic.name}.join(",") %>