2017-06-13 6 views
0

Je devais envoyer une notification de mise à jour de cours à l'utilisateur. La notification de mise à jour contient quatre types de [:due,:missed,:over_due,:new]. Pour le rendre facile, j'ai omis le champ inutile de données comme dû et manqué le même que le format en retard et nouveau. Les données fournies ci-dessous appartenaient à un utilisateur. Un utilisateur peut faire partie de plusieurs cours, c'est pourquoi 2 cours_différents sont présents dans le hash (cours_id 20 et 30). L'id représente ici assignment_id dans un cours particulier. Le format réel des données est. Supposons que ce soit juste une donnée fictive que j'ai créée pour un utilisateur pour plus de clarté et d'explication.comment analyser le hachage donné en sortie désirée en ruby ​​sur des rails?

assignments = { 
    :new => { 
    1 => { 
     :id => 1, 
     :course_id => 20, 
     :name => "A" 
    }, 
    2 => { 
     :id => 2, 
     :course_id => 20, 
     :name=>"A" 
    }, 
    3 => { 
     :id => 3, 
     :course_id => 30, 
     :name=>"B" 
    } 
    }, 
    :over_due => { 
    4 => { 
     :id => 4, 
     :course_id => 20, 
     :name => "A" 
    }, 
    5 => { 
     :id => 5, 
     :course_id => 30, 
     :name => "B" 
    } 
    } 
} 

Mon obligation d'analyser les données dans ce format:

{ 
    20 => { 
    :new => { 
     1 => { 
     :id => 1, 
     :course_id => 20, 
     :name=>"A" 
     }, 
     2 => { 
     :id => 2, 
     :course_id => 20, 
     :name => "B" 
     } 
    }, 
    :over_due => { 
     4 => { 
     :id => 4, 
     :course_id => 20, 
     :name => "E" 
     } 
    } 
    }, 
    30 => { 
    :new => { 
     3 => { 
     :id => 3, 
     :course_id => 30, 
     :name => "C" 
     } 
    }, 
    :over_due => { 
     5 => { 
     :id => 5, 
     :course_id => 30, 
     :name=>"F" 
     } 
    } 
    } 
} 
+0

Tout d'abord, nous montrer ce vous avez essayé jusqu'ici. Alors, quel est le résultat attendu en termes * clairs *. Certains de vos hashes ont ': course_id' été transformés en' value', d'autres n'ont pas ... Donnez-nous un aperçu. –

+0

J'avais mis à jour la question. Regardez le code suivant. hash = {} assignments.each do | type, type_data | type_data.each faire | affectation_données, données | course_id = données [: course_id] hachage [course_id] = {} hachage [course_id] [type] = {} hachage [course_id] [type] [assignment_id] = données fin fin –

+1

@MukeshKumarGupta Ne pas écrire du code dans la section des commentaires, c'est très difficile à lire. S'il vous plaît [modifier votre message] (https://stackoverflow.com/posts/44520178/edit) et le formater bien. –

Répondre

1

chèque ci-dessous le code de votre solution:

hash = {} 
assignments.each do |type,type_data| 
    type_data.each do |assignment_id,data| 
     course_id = data[:course_id] 
     hash[course_id] = {} if hash[course_id].nil? 
     hash[course_id][type]= {} if hash[course_id][type].nil? 
     hash[course_id][type][assignment_id] = data 
    end 
end 

sortie:

{20=>{:new=>{1=>{:id=>1, :course_id=>20, :name=>"A"}, 2=>{:id=>2, :course_id=>20, :name=>"B"}}, :over_due=>{4=>{:id=>4, :course_id=>20, :name=>"E"}}}, 30=>{:new=>{3=>{:id=>3, :course_id=>30, :name=>"C"}}, :over_due=>{5=>{:id=>5, :course_id=>30, :name=>"F"}}}} 
+0

ouais! Ça fonctionne. J'ai eu ce qui me manquait. Je créais un hash vide chaque fois à l'aveuglette. Je pense que nous pouvons optimiser. Si je trouve une meilleure façon de le faire. Je vais poster dans les mêmes discussions. Je vous remercie. –

+1

@MukeshKumarGupta Super. Acceptez ma réponse si cela fonctionne pour vous> Merci – puneet18