Ruby on Rails - 每个切片都有不同的元素

时间:2017-01-26 13:21:18

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

在我的应用程序中,我执行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

希望我能解释一下我在寻找什么。

1 个答案:

答案 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_sliceeach_slice(1)基本没用,each_slice(2)只会成对分割你的数组。检查id是奇数还是偶数应该给你一样多的信息,而不需要另一个嵌套块。

each_slice(2)也是您的索引保持等于01的原因。它不能等于2,所以你的Taboola案例从未发生过。