解析ruby for循环中的逗号

时间:2015-06-25 20:19:36

标签: ruby-on-rails ruby loops gsub

所以我在rails app上的ruby中循环遍历一个对象循环

目前这是代码:

<%overlays.by_time.each do |overlay| %>
  {
    "content": "<a href=''><img src='<%= overlay.imageurl %>'></a>",
     start: <%=overlay.starttime %>,
     end: <%=overlay.starttime %> + <%= overlay.duration %>,
     style: {<%=raw theme.contact_us_overlay_style %>},
     click_url: '<%= overlay.linkurl %>'
  },
<%end>

问题是逗号,阻止我的videojs播放器运行。我需要下一个前面的叠加内容的逗号,但我不需要它在最后一个,这是导致它的问题。如何在最后一次对象迭代中删除它?

2 个答案:

答案 0 :(得分:2)

你有几种可能性。一个快速(但不是很优雅)的是检查该项目是否是最新项目。

您可以使用例如each_with_index

<% overlays.by_time.each_with_index do |overlay, index| %>
  {
    "content": "<a href=''><img src='<%= overlay.imageurl %>'></a>",
     start: <%=overlay.starttime %>,
     end: <%=overlay.starttime %> + <%= overlay.duration %>,
     style: {<%=raw theme.contact_us_overlay_style %>},
     click_url: '<%= overlay.linkurl %>'
  }<%= "," unless index == (overlays.length - 1) %>
<% end %>

一个更好的选择,因为你实际上是在生成一个字符串输出,就是生成(可能是使用一个帮助器)每个叠加的字符串输出作为项目的数组,然后使用join(",")来连接数组将值转换为单个字符串。

此代码不应该是ERB模板的一部分,但可以是函数或帮助程序。

def json_for_overlays(overlays)
  overlays.by_time.map do |overlay, index|
    <<-JS
    {
      content: <a href=""><img src="#{overlay.imageurl}"></a>,
      start: #{overlay.starttime},
      end: #{overlay.starttime} + #{overlay.duration},
      style: {#{raw(theme.contact_us_overlay_style)}},
      click_url: '#{overlay.linkurl}'
    }
    JS
  end.join(",")
end

答案 1 :(得分:2)

你可以用另一种方式来看待它。将逗号放在每个项目之前。然后你只需要压缩 0th 索引的逗号。

<% overlays.by_time.each_with_index do |overlay, index| %>
  <%= "," unless index == 0 %>
  {
    "content": "<a href=''><img src='<%= overlay.imageurl %>'></a>",
     start: <%=overlay.starttime %>,
     end: <%=overlay.starttime %> + <%= overlay.duration %>,
     style: {<%=raw theme.contact_us_overlay_style %>},
     click_url: '<%= overlay.linkurl %>'
  }
<% end %>