2010-12-29 2 views
0

Je travaille sur un script qui est censé écrire une liste d'éléments dans un hachage, mais pour une raison quelconque, il ne place que le dernier élément dans la boucle dans le hachage ... Je travaille sur ce script toute la journée, donc je suis sûr que c'est quelque chose que je suis en train de manquer.Problèmes de boucle Ruby

Voici le script

@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 

Il y a plusieurs enregistrements dans la table MediaRating donc je sais qu'il doit faire quelque chose avec la façon dont ma boucle est. Merci d'avance pour l'aide!

Code de travail:

@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

remarque: ces trouvailles avec id montre que vous n'utilisez pas les associations (has_many, belongs_to, ...) – tokland

Répondre

13

Dans la dernière ligne, vous êtes sur-écriture toute hachage @history au lieu d'ajouter une nouvelle paire clé/valeur. Je suppose que ce n'est pas ce que vous vouliez. Modifiez cette ligne:

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

à ceci:

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

Je savais que c'était quelque chose de simple !!! Merci! J'ai même été capable de simplifier mes boucles aussi! Ajout du nouveau code ci-dessus. – dennismonsewicz

+6

@dennismonsewicz: Alors il est temps pour vous de pousser cette grosse coche soulignée pour cette réponse. – karatedog