【问题标题】:parsing a comma in ruby for loop在 ruby​​ for 循环中解析逗号
【发布时间】:2015-06-25 20:19:36
【问题描述】:

所以我在我的 ruby​​ on rails 应用程序中循环一个对象 for 循环

目前这是代码:

<%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 播放器运行。我需要逗号用于下一个前面的叠加内容,但我不需要在最后一个上使用逗号,这是导致它的问题。如何在最后一次对象迭代中删除它?

【问题讨论】:

    标签: ruby-on-rails ruby loops gsub


    【解决方案1】:

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

    您可以使用例如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
    

    【讨论】:

    • 您先生,是一位绅士和学者。我尝试在我的尝试中做一个 gsub,但你的要简单得多。谢谢!
    【解决方案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 %>
    

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2019-08-11
      • 2012-02-21
      • 2021-12-20
      • 1970-01-01
      • 2012-09-30
      相关资源
      最近更新 更多