2012-03-28 4 views
0

Ich möchte Version anderes Bild anzuzeigen:cycle() ein image_tag

ersten Artikel: große Banner

Sekunden: kleine Fahne, die nach rechts schweben/links

so, als erstes: verwenden Zyklus(), aber nicht funktionieren:

= cycle(image_tag(banner_big), image_tag(banner_small) 

oder

= image_tag(cycle(banner_big_path, banner_small_path)) 

Nur das erste Bild wird angezeigt

Es gibt einen richtigen Weg, um einen so zu machen?

+1

'cycle()' muss innerhalb einer Schleife innerhalb einer Seite ausgeführt werden, sodass bei jedem Schleifenzyklus der nächste Wert zurückgegeben wird und alle Werte gleichzeitig auf dieser Seite angezeigt werden. Willst du das erreichen? –

+0

Sie haben also mehrere Artikel auf derselben Seite und möchten, dass einige das große Bild und einige das kleine Bild anzeigen? Ist der Wert von banner_big_path und banner_small_path für jeden Artikel anders (wenn ja, woher kommt er?) –

+0

Ja, es ist für mehrere Artikel auf derselben Seite. Ein Artikel hat eine andere Version der Illustration mit unterschiedlichen Bildern namens namespaced (small_ big_ ...) von carrierwave, aber nicht 'cycled', in meinen beiden Beispielen wird nur das erste Bild (banner_big) auf jedem Artikel angezeigt und es ist der einzige 'Zyklus ' auf der Seite. Kleiner Look wie /local_uploads/actu/slider/8/banderolle_shenmue-2.jpg & Big /local_uploads/actu/slider/8/big_shenmue-2.jpg – tree

Antwort

2

Ihr Problem ist, dass Schienen erwartet Sie bei jedem Zyklus mit dem gleichen Satz von Saiten zu nennen. In dem Moment, in dem Sie ein anderes Paar von Strings an jeden Aufruf zum Zyklus übergeben, setzt rails den Zyklus jedes Mal neu. Neue Zyklen beginnen immer mit ihrem ersten Wert, daher das von Ihnen beschriebene Ergebnis.

Angenommen, Ihre Artikel hatte Methoden genannt small_path, big_path, so etwas wie

article.send(cycle("big_path","small_path")) 

Sollten alternative Bildpfade zurück.

+0

Nice one! Also habe ich = image_tag (actu.send (cycle ("big_path", "kleiner_pfad",: name => "pic")) hinzugefügt,: class => cycle ("groß", "klein",: name => "classpic ")) und es sieht wie http://i.imgur.com/NCyl2.png aus – tree

0

Sie können die session Einrichtung verwenden, um dort Indizes zu speichern und diese zu verwenden. Zum Beispiel:

# application_helper.rb 
def session_banner_index 
    session[:banner_index] || 0 
end 

def session_banner(*list) 
    list[session_banner_index % list.length] 
end 

# application_controller.rb 
def increment_session_banner_index! 
    session[:banner_index] = (session[:banner_index] || 0) + 1 
end 

Diese Hilfsmethoden nähern die Schnittstelle Sie fragten:

= image_tag(session_banner(banner_big, banner_small))