每个Do循环,检查项目是否是最后一个

时间:2016-06-29 23:41:46

标签: ruby-on-rails

我有以下循环

<% @museum.museumcloseddays.order(:closedday).each do |day| %>
      <%= day.closedday.strftime("%B") + " " + day.closedday.day.to_s  %>
<% end %>

其中写下场地关闭日的月份和日期。

我会尝试用逗号分隔它们,如果是| day | item是每个循环中的最后一项,写一个句点。

然后我尝试测试| day |使用该方法的项目如下:

if day.last then ...

但它不起作用......

2 个答案:

答案 0 :(得分:2)

使用Array :: select和Array :: join。一个完全简单的例子是:

["a", "b", "c"].select { |i| "#{a}!" }.join(',') + '.'

这将替换整个每个循环,并将输出转换为选择块。 Select将创建一个输出字符串数组,join将用逗号分隔,而不是在最后添加一个。

我试图按照你的例子来说明这一点:

<%= 
  @museum.museumcloseddays.order(:closedday).select do |day|
    day.closedday.strftime("%B") + " " + day.closedday.day.to_s
  end.join(',') + '.'
%>

我不完全确定我的解决方案的详细信息是正确的,因为我没有让你的沙箱玩,但我知道选择然后加入的方法会做你想做的事情对你所在日期的位置进行任何额外检查。在阵列中。

答案 1 :(得分:0)

您可以运行.each_with_index并打印逗号,如果它不是最后一个元素,例如index != size_of_museumclosedays

或如果museumclosedays[-1] != day

打印逗号