2016-07-14 13 views
0

Ich verwende each_slice in meiner Anwendung, um eine Anzeigencode alle 4 Bild anzuzeigen.Ruby on Rails - Finden Sie die letzte Runde bei der Verwendung von each_slice

Dies ist, wie ich es tue:

- @post.images.each_slice(4) do |group| 
    - group.each do |image| 
    // My images 

    %div.ads 
    // My ads code 

Wie kann ich die letzte Runde zu finden und verhindern, dass es ad zeigen, da ich Anzeige auf der letzten Runde nicht zeigen wollen.

Ich habe getan, was sie sagt, hier, aber kein Glück: How to know that we're on "the last round" of a .each_slice

Ich habe die last_slide Methode in meinem post_controller und bekommen falsche Anzahl an Argumenten, wenn ich run/before_action es in meinem show -Blick und wenn Ich mache keine in meinem Controller, passiert nichts.

+0

Sie es in einer if-Anweisung wie so einschließen könnte 'wenn image.id = images.last! .id' –

+0

Ja oder 'wenn group.include? (images.last)' – jphager2

+0

@AAnkudovich Es hat nicht funktioniert:/ – Rubioli

Antwort

0

Es kann auf 2 verschiedene Arten erfolgen. der erste ist ein einfacher ein, während die zweite Lösung komplexer ist.

1-Lösung (Dank jphager2):

if group.include?(images.last) 

2 Lösung:

- @post.images.each_slice(2).each_with_index do |group, index| 
    - group.each_with_index do |image| 
    // your code 
    - if index < group.size 
    // Ad code 
0

Um Ihr Ziel zu erreichen, eine Anzeige zwischen allen 4 Bildern einzufügen, können Sie die Rendermethode von Rails mit den Optionen collection und spacer_template nutzen.

# The view 
= render partial: 'image_group', collection: @images.each_slice(4).to_a, spacer_template: 'advertisement' 

# _image_group.html.haml 
= render partial: 'image', collection: image_group 

# _image.html.haml 
// Your image code 

# _advertisement.html.haml 
%div.ads 
    // Your Ads Code