在我的应用程序中,我执行noNA
然后each_slice
,因为我在我的应用程序中执行了一些操作。
我目前的代码是这样的:
each_with_index
通常我会在每页上显示4张图片。前三个广告将在- @images.each_slice(@album.images_per_page <= 2 ? 1 : 2) do |group|
- group.each_with_index do |img, i|
.col-md-2
/* Ads Left */
.col-md-7
= image_tage img.image_url(:thumb)
.col-md-3
/* Ads Right */
&amp; .col-md-2
。我想要实现的是为每个元素添加不同的广告代码/类型。
例如,第一张图片的 300x250标签,第二张图片 300x600 ,第三张图片的内容类型广告(Taboola),而不是在这3个之后显示任何广告。
我尝试过:(例如1)
.col-md-3
和(例2)
- if i == 0
%h1 300x250
- elsif i == 1
%h1 300x600
- elsif i == 2
%h1 Taboola
但我不能得到我想要的东西。 Ex.1采用每1个元素并添加 300x250 &amp;每个第二个元素并添加 300x600 ,所以我没有 Taboola 并获得 300x250 &amp;的两倍 300x600 ,而Ex.2采用每个第二个元素,仅添加 300x250 。
Ex.1结果变为:
- if i+1 == group.length
%h1 i+1 = group.length
Ex.2结果变为:
Image 1 => 300x250
Image 2 => 300x600
Image 3 => 300x250
Image 4 => 300x600
我如何实现这一目标,我可以选择要在每个元素上展示的广告?
结果我正在寻找:
Image 1 => /* Nothing */
Image 2 => 300x250
Image 3 => /* Nothing */
Image 4 => 300x250
希望我能解释一下我在寻找什么。
答案 0 :(得分:1)
目标应该是在视图中留下尽可能少的逻辑。复杂的逻辑应该在模型/控制器/帮助器中完成。
这是zip
的可能性:
@images = %w(imageA imageB imageC imageD)
params = [
['300x250','r1'],
['300x600','r2'],
['Taboola','r3']
]
@images.zip(params).each_with_index do |(image, param), i|
left, right = param
puts "Image : #{image}"
puts "ParamL: #{left}"
puts "ParamR: #{right}"
puts "Index : #{i}"
puts "Even? : #{i.even?}"
puts
end
输出:
Image : imageA
ParamL: 300x250
ParamR: r1
Index : 0
Even? : true
Image : imageB
ParamL: 300x600
ParamR: r2
Index : 1
Even? : false
Image : imageC
ParamL: Taboola
ParamR: r3
Index : 2
Even? : true
Image : imageD
ParamL:
ParamR:
Index : 3
Even? : false
这似乎是您想要做的事情的足够信息。
此外,您使用1或2作为参数调用each_slice
。 each_slice(1)
基本没用,each_slice(2)
只会成对分割你的数组。检查id
是奇数还是偶数应该给你一样多的信息,而不需要另一个嵌套块。
each_slice(2)
也是您的索引保持等于0
或1
的原因。它不能等于2,所以你的Taboola
案例从未发生过。