在n个部分之后插入广告代码?

时间:2015-06-26 17:06:49

标签: ruby-on-rails ruby ruby-on-rails-4 partials

Rails 4.2

我有一个显示部分的集合 - 有没有办法在集合中的某个数字后面添加一段代码?

所以我在列表中显示了10个博客帖子,每个帖子的格式都来自部分列表。我想在每3个帖子之后插入我的AdSense代码

<%= render partial: "list", collection: @posts %>

有没有办法自动执行此操作,或者我是否必须执行某些操作,例如为每个帖子分配编号的ID并且具有&#34; if(id / 3)%1 == 0&#34;并且有条件地显示它?

3 个答案:

答案 0 :(得分:1)

在部分_list.html.erb内部,您可以检查Rails list_iteration提供的计数器变量。因此,您的支票将位于_list.html.erb部分内:

render 'ad' if list_iteration.index % 3 == 0

您也可以使用list_counter助手。

阅读此Rendering a collection of partials

<%= render partial: "ad", collection: @advertisements %>
  

这将呈现“advertiser/_ad.html.erb”并将局部变量ad传递给模板以供显示。 将自动为模板提供迭代对象,其名称格式为partial_name_iteration 。迭代对象知道当前对象在集合中具有哪个索引以及集合的总大小。迭代对象还有两个便捷方法first?last?。在上面的示例中,模板将为fed ad_iteration。为了向后兼容,partial_name_counter仍然存在,并映射到迭代的index方法。

答案 1 :(得分:0)

类似的东西:

<% @posts.each_slice(3) do |posts| %>
   <%= render partial: "list", collection: posts %>
   <%= render partial: 'ad_sense' %>
<% end %>

可能会工作

each_slice docs进一步阅读

答案 2 :(得分:0)

您可以使用循环索引执行某些操作,例如

<% @posts.each_with_index do |post, index| %>
  <%= render partial: 'list', locals:{post: post} %>
  <% if index % 3 == 2 %>
     #adsense code here
  <% end %>
<%end %>