2010-11-22 2 views
0

Ich versuche, eine Bildshow für den Header auf der Root-Seite einer RoR-Site zu haben, und alle anderen Seiten zeigen zufällig eines von drei anderen Bildern. Das Problem ist, ich weiß nicht, wie ich das zur Arbeit bringen soll. Irgendwelche Ideen?Wie schreibt man eine <%if then%> Anweisung, um ein Bild dynamisch anzuzeigen?

+0

Verwenden von Layouts, vielleicht: http://guides.rubyonrails.org/layouts_and_rendering.html? –

Antwort

1

in Ihrer Anwendung Layout können Sie den Standard-Header wie folgt definieren:

<% if content_for?(:header) %> 
<%=yield(:header)%> 
<% else %> 
<%=image_tag(files[rand(files.length)])%> 
<% end %> 

Und in der Ansicht für Ihre Homepage, würden Sie es content_for mit außer Kraft setzen:

<% content_for :header do %> 
<%=image_tag 'home.jpg' %> 
<% end %> 
4

Normalerweise können Sie den Controller testen und entsprechend reagieren. Eine einfache Möglichkeit, dies zu verkapseln ist ein Helfer zu verwenden:

<%= image_tag(header_image) %> 

Dieses einfach in ApplicationHelper umgesetzt werden könnten:

def header_image 
    case (params[:controller]) 
    when 'home' 
    # Standard home page image 
    '/images/home_image.jpg' 
    else 
    # Randomly chosen header image 
    %w[ /images/x.jpg /images/y.jpg ].shuffle.first 
    end 
end 

Sie können ein bestimmtes Verzeichnis für Ihre Header-Bilder machen wollen und dann, dass laden Dynamisch auflisten, anstatt sie in Ihrem Helfer angeben zu müssen.

+0

aus irgendeinem Grund, dass Sie lieber 'params [: controller]' über 'contrller.controller_name'? Das habe ich immer gemacht. –

+0

Ist es nicht besser, die Methode 'header_image' in 'HomeHelper' zu überschreiben, als Controller-abhängige Logik in den Anwendungshelfer zu stellen? –

+0

Gute Antwort. Wenn sich die Bilder wahrscheinlich ändern, können Sie anstelle des statischen Arrays von Bildnamen die Konfiguration mit 'YAML :: load (File.open (" # {RAILS_ROOT} /config/images.yml "))' –

0

Versuchen:

<%- files = %w(banner-1.png banner-2.png banner-3.png) -%> 
<%= image_tag (files[rand(files.length)] if request.url == root_url) || 'banner.png' %> 
+0

Das beantwortet nicht wirklich den ersten Teil seiner Frage, wie man ein statisches Bild auf der Homepage zeigt, und rotiert nur zufällig auf den anderen Seiten. Auch sollte dies wahrscheinlich nicht inline, sondern als Teil eines Helfers sein. –

+0

Tut mir leid, habe gerade gemerkt, dass ich den ersten Teil verpasst habe und hinzugefügt habe. Nur Code inline zur besseren Lesbarkeit angezeigt. –

Verwandte Themen