解析 ruby for 循环中的逗号
parsing a comma in ruby for loop
所以我在 rails 应用程序
上的 ruby 中循环对象 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 播放器 运行。我需要下一个前面的覆盖内容的逗号,但我不需要最后一个逗号,这是导致它的问题。我如何在最后一次对象迭代中删除它?
你有几种可能性。一个快速(但不是很优雅)的方法是检查该项目是否是最新的。
你可以使用例如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
你可以换个角度看。将逗号 放在每个项目的 之前。然后你只需要取消 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 %>
所以我在 rails 应用程序
上的 ruby 中循环对象 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 播放器 运行。我需要下一个前面的覆盖内容的逗号,但我不需要最后一个逗号,这是导致它的问题。我如何在最后一次对象迭代中删除它?
你有几种可能性。一个快速(但不是很优雅)的方法是检查该项目是否是最新的。
你可以使用例如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
你可以换个角度看。将逗号 放在每个项目的 之前。然后你只需要取消 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 %>