红宝石循环中的逗号分离?

时间:2011-09-14 17:07:51

标签: ruby ruby-on-rails-3

我正在使用rails 3.1和ruby 1.9.2创建一个广告服务器。在应用程序中,我在localhost:3000 / ads / script页面生成javascript以显示广告。我正在寻找循环的一些帮助。

以下是script.html.erb的代码:

<% @ad.each do |ad| %>   

  <% if ad.end_date <= Date.today || ad.start_date >= Date.today %> 

  <% else %>

  var advert<%= ad.id %> = ''
  advert<%= ad.id %>+='<img class="ad" alt="<%= ad.title %>" src="http://<%= request.env["HTTP_HOST"] %><%= ad.image.url %>" border="0" height="<%= ad.best_height %>" width="<%= ad.best_width %>" />';
  advert<%= ad.id %>+='</a>';
  advert<%= ad.id %>+=''; 

  <% end %>  
<% end %>    


document.write( <% @ad.each do |ad|%>
                <% if ad.end_date <= Date.today || ad.start_date >= Date.today %>

                <% else %>
                  avert<%= ad.id %>, 
                <% end %>  
             <% end %>);     

在第二个循环中,我尝试将动态javascript变量添加到用逗号分隔的document.write中。比如“document.write(advert1,advert2,advert3),但是使用当前代码,它会在每个变量之后放一个逗号,我需要那里不是一个尾随的逗号。知道怎么做到这一点吗?

除了逗号分隔问题,一切正常但它似乎并不干燥,似乎有更好的方法来做if else声明...这是我的第一个ruby应用程序和重构的任何见解我将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:3)

使用join:

@ad.select{|ad| !(ad.end_date <= Date.today || ad.start_date >= Date.today)}.collect{|ad| "avert#{ad.id}" }.join(",")