2010-12-29 13 views
0

Ich arbeite an einem Skript, das eine Liste von Elementen zu einem Hash schreiben soll, aber aus irgendeinem Grund ist es nur das letzte Element in der Schleife in den Hash setzen ... Ich habe gearbeitet Dieses Skript den ganzen Tag, also bin ich mir ziemlich sicher, dass es etwas ist, das ich gerade vermisse.Ruby Schleife Probleme

Hier ist das Skript

@mr = MediaRating.where("user_id = ?", session['user_credentials_id']) 
@mr.each do |rating| 
    @m = Media.where("id = ?", rating.media_id) 
    @m.each do |m| 
    s = Profile.find_by_subscriber_id(m.subscriber_id) 
    @h_lang = Language.find_by_code(s.language) 
    @history = {m.title => @h_lang.english} 
    end 
end 

Es gibt mehrere Datensätze in der Tabelle MediaRating so weiß ich es, etwas zu tun hat mit, wie meine Schleife ist. Vielen Dank im Voraus für die Hilfe!

Arbeitscode:

@mr = MediaRating.where("user_id = ?", session['user_credentials_id']) 
@mr.each do |rating| 
    @m = Media.find(rating.media_id) 
    s = Profile.find_by_subscriber_id(@m.subscriber_id) 
    @h_lang = Language.find_by_code(s.language) 
    @history[@m.title] = @h_lang.english 
end 
+1

Seite Anmerkung: diese Funde mit der ID zeigt, dass Sie sich nicht mit Assoziationen (has_many, belongs_to, ...) – tokland

Antwort

13

In der letzten Zeile, Sie sind Überschreiben des gesamten @history Hash statt das Hinzufügen eines neuen Schlüssel/Wert-Paar zu. Ich schätze, das ist nicht das, was Sie vorhaben. Ändern Sie diese Zeile:

@history = {m.title => @h_lang.english} 

dazu:

@history[m.title] = @h_lang.english 
+0

Ich wusste, es war etwas einfach !!! Vielen Dank! Ich konnte sogar meine Loops vereinfachen! Neuer Code oben hinzugefügt. – dennismonsewicz

+6

@dennismonsewicz: Dann ist es an der Zeit für diese Antwort das große fett umrissene Häkchen zu drücken. – karatedog