2010-11-23 3 views
0

Ich versuche, einen Helfer zu erstellen, um Bewertungssterne basierend auf einem Modellattribut anzuzeigen.Wie mehrere image_tag innerhalb einer Iteration in einem Helfer angezeigt werden

Ich habe folgendes:

def show_profile_stars(profile) 
    content_tag :span, :class => 'stars' do 
     profile.stars.times do 
     image_tag("stars.gif", :size => "30x30", :class => "gold") 
     end 
    end 
    end 

'Sterne' eine ganze Zahl Feld.

Aber es ist nicht das Rendern der Bild-Tags, stattdessen zeigt es nur buchstäblich die 'Sterne' Nummer.

Wenn ich nur image_tag ohne den Iterationsblock, es zeigt das Bild, das Problem ist mit der Iteration.

Ich denke, ich vermisse etwas über Methoden, die Blöcke erhalten (ich bin noch neu bei RoR).

Irgendwelche Hilfe?

Danke!

Antwort

1

Zwei Dinge, würde dies nicht in CSS mit einer Klasse auf der Spanne (z. B. Ein-Stern, Zwei-Sterne, usw.) getan werden?

Wie auch immer, um tatsächlich zu tun, was Sie zu tun versuchen:

stars = [] 
profile.stars.times { stars << image_tag("stars.gif", :size => "30x30", :class => "gold") } 
content_tag :span, stars.join("\n").html_safe, :class => "stars" 
+0

Ich habe nur ein Bild von 1 Stern. Leute können von 0 Sternen bis zu vielen haben ... also muss ich die richtige Menge an Sternen abhängig vom Attribut anzeigen. Ich werde deine Methode versuchen, danke! – emzero

+0

Es hat funktioniert. Irgendeine Erklärung, warum meine nicht ??? Danke – emzero

+1

Der Grund, warum deins nicht funktioniert, ist 3 x {3}. –

2

Verwenden concat Helfer:

def show_profile_stars(profile) 
    content_tag :span, :class => 'stars' do 
    profile.stars.times do 
     concat(image_tag("stars.gif", :size => "30x30", :class => "gold")) 
    end 

    nil 
    end 
end 

Sie müssen auch nil am Ende des content_tag, so dass sie zurückkehren gibt stars nicht aus.