Rails 4.2
我有一个显示部分的集合 - 有没有办法在集合中的某个数字后面添加一段代码?
所以我在列表中显示了10个博客帖子,每个帖子的格式都来自部分列表。我想在每3个帖子之后插入我的AdSense代码
<%= render partial: "list", collection: @posts %>
有没有办法自动执行此操作,或者我是否必须执行某些操作,例如为每个帖子分配编号的ID并且具有&#34; if(id / 3)%1 == 0&#34;并且有条件地显示它?
答案 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 %>