2010-12-28 1 views
0

J'écris un morceau de code qui s'intégrera avec TripIt. Dans mes plans TripIt, j'ai un exemple de voyage avec ONE item (Activité). Je veux trier par date. Le tri échoue. Lorsque j'ajoute une autre activité, le tri fonctionne. Je crois que c'est à cause de quand c'est un seul article, c'est un hachage et quand c'est une collection d'articles, c'est un tableau de hachages.Comment réparer ce hachage et/ou ce tableau dans Rails?

Voici ma méthode de tri:

@tripit_trip[k].sort_by { |h| h["StartDateTime"]["date"] }.each do |o| 
    o["ObjectType"] = "ActivityObject" 
    tmp[ o["StartDateTime"]["date"] ] = [] if tmp[ o["StartDateTime"]["date"] ].nil? 
    tmp[ o["StartDateTime"]["date"] ] << o 
    end 

Il échoue sur la première ligne.

Voici ce que les données ressemble à venir de TripIt:

 
// One item 
--- 
id: "20392856" 
trip_id: "11086745" 
is_client_traveler: "true" 
relative_url: /reservation/show/id/20392856 
display_name: Programming 
is_purchased: "true" 
StartDateTime: 
    date: "2011-01-09" 
    timezone: Asia/Ulaanbaatar 

Ce sont les données TripIt quand il y a deux éléments:

 
// Two items 

    --- 
    - id: "20631958" 
     trip_id: "11086745" 
     is_client_traveler: "true" 
     relative_url: /reservation/show/id/20631958 
     display_name: Programming 2 
     is_purchased: "true" 
     StartDateTime: 
     date: "2011-01-09" 
     timezone: Asia/Ulaanbaatar 
    - id: "20392856" 
     trip_id: "11086745" 
     is_client_traveler: "true" 
     relative_url: /reservation/show/id/20392856 
     display_name: Programming 
     is_purchased: "true" 
     StartDateTime: 
     date: "2011-01-09" 
     timezone: Asia/Ulaanbaatar 

Toute idée sur ce que je fais mal serait sois merveilleux.

Merci!

Répondre

1

Avec un seul élément dans la liste, vous n'avez pas vraiment besoin de trier. Pourquoi ne pas simplement mettre un if dans le code qui ignore le tri s'il n'y a qu'un seul article retourné?

+0

C'est certainement une suggestion raisonnable. En regardant mon code, j'ai un certain nombre d'instructions if pour chaque type d'objet provenant de TripIt. Donc, je devrais mettre cela là aussi. J'envisage déjà de refactoriser le code parce qu'il commence à avoir l'air négligé. Mais c'est certainement une bonne idée. – cbmeeks

+1

Étant donné que TripIt renvoie déjà différentes structures de données pour un résultat par rapport à plusieurs (ce qui est moche, mais rien que vous pouvez contrôler), il ne me semble pas déraisonnable de voir un cas particulier dans votre code. –

+1

Merci pour la suggestion. En fait, je viens de vérifier pour voir si les données retournées sont un hachage ou un tableau. Vraiment nul que TripIt retourne deux structures de données complètement comme ça. Quoi qu'il en soit, cela semble fonctionner: https://gist.github.com/758019 – cbmeeks