Ruby on Rails - 每个 do 切片的不同元素
Ruby on Rails - Different elements for each do slices
在我的应用程序中,我先 each_slice
然后 each_with_index
因为我在我的应用程序中做了一些事情。
我现在的代码是这样的:
- @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 */
通常我每页显示4张图片。前 3 个将在 .col-md-2
& .col-md-3
内有广告。我想要实现的是为每个元素添加不同的 ads-codes/type 。
例如,第一张图片有 300x250 标签,第二张图片有 300x600,第三张图片有 content-type广告 (Taboola) 并且在这 3.
之后不显示任何广告
我试过了:(例 1)
- if i == 0
%h1 300x250
- elsif i == 1
%h1 300x600
- elsif i == 2
%h1 Taboola
和(示例 2)
- if i+1 == group.length
%h1 i+1 = group.length
但我没有得到我要找的东西。 Ex.1 取每 1 个元素并添加 300x250 & 每第二个元素添加 300x600,所以我没有得到 Taboola 并得到 300x250 和 300x600 的两倍,而 Ex.2 取每个第二个元素并仅添加 300x250.
Ex.1 结果变成这样:
Image 1 => 300x250
Image 2 => 300x600
Image 3 => 300x250
Image 4 => 300x600
Ex.2 结果变成这样:
Image 1 => /* Nothing */
Image 2 => 300x250
Image 3 => /* Nothing */
Image 4 => 300x250
我如何才能选择要在每个元素上显示的广告?
我要找的结果:
Image 1 => 300x250
Image 2 => 300x600
Image 3 => Taboola
Image 4 => /* Nothing */
希望我能解释一下我在找什么。
目标应该是在视图中保留尽可能少的逻辑。复杂的逻辑应该在model/controller/helpers.
中完成
这是 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
对于你想做的事情,这些信息似乎已经足够了。
此外,您调用 each_slice
时将 1 或 2 作为参数。 each_slice(1)
基本上没用,each_slice(2)
只会将你的数组分成两部分。检查 id
是奇数还是偶数应该给你同样多的信息,而不需要另一个嵌套块。
each_slice(2)
也是您的索引保持等于 0
或 1
的原因。它不能等于 2,所以你的 Taboola
案例从未发生过。
在我的应用程序中,我先 each_slice
然后 each_with_index
因为我在我的应用程序中做了一些事情。
我现在的代码是这样的:
- @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 */
通常我每页显示4张图片。前 3 个将在 .col-md-2
& .col-md-3
内有广告。我想要实现的是为每个元素添加不同的 ads-codes/type 。
例如,第一张图片有 300x250 标签,第二张图片有 300x600,第三张图片有 content-type广告 (Taboola) 并且在这 3.
之后不显示任何广告我试过了:(例 1)
- if i == 0
%h1 300x250
- elsif i == 1
%h1 300x600
- elsif i == 2
%h1 Taboola
和(示例 2)
- if i+1 == group.length
%h1 i+1 = group.length
但我没有得到我要找的东西。 Ex.1 取每 1 个元素并添加 300x250 & 每第二个元素添加 300x600,所以我没有得到 Taboola 并得到 300x250 和 300x600 的两倍,而 Ex.2 取每个第二个元素并仅添加 300x250.
Ex.1 结果变成这样:
Image 1 => 300x250
Image 2 => 300x600
Image 3 => 300x250
Image 4 => 300x600
Ex.2 结果变成这样:
Image 1 => /* Nothing */
Image 2 => 300x250
Image 3 => /* Nothing */
Image 4 => 300x250
我如何才能选择要在每个元素上显示的广告?
我要找的结果:
Image 1 => 300x250
Image 2 => 300x600
Image 3 => Taboola
Image 4 => /* Nothing */
希望我能解释一下我在找什么。
目标应该是在视图中保留尽可能少的逻辑。复杂的逻辑应该在model/controller/helpers.
中完成这是 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
对于你想做的事情,这些信息似乎已经足够了。
此外,您调用 each_slice
时将 1 或 2 作为参数。 each_slice(1)
基本上没用,each_slice(2)
只会将你的数组分成两部分。检查 id
是奇数还是偶数应该给你同样多的信息,而不需要另一个嵌套块。
each_slice(2)
也是您的索引保持等于 0
或 1
的原因。它不能等于 2,所以你的 Taboola
案例从未发生过。