2010-12-28 7 views
0

TripItと統合するコードを書いています。私のTripItプランでは、1つのアイテム(アクティビティ)を使用した旅行例があります。私は日付でソートしたい。ソートは失敗します。別のアクティビティを追加するとソートが機能します。私はそれが単一のアイテムであると考えています。それはハッシュです。アイテムのコレクションでは、ハッシュの配列です。 このハッシュや配列ソートをRailsで修正するにはどうすればよいですか?

@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 

それは、最初の行に失敗します。

は、ここに私のソート方法です。ここで

は、データがTripItはから来るように見えるものです:

 
// 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 

私は間違った考えをやって上の任意の洞察力:

 
// 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 

これは、2つの項目があるときTripItのデータであり、素晴らしい。

ありがとうございます!

答えて

1

リスト内の1つの項目で、ソートする必要はありません。戻り値のアイテムが1つだけの場合は、並べ替えをスキップするコードにifを入れてみませんか?

+0

これは確かに合理的な提案です。私のコードを見ると、TripItから来るオブジェクトの種類ごとにif文がかなりあります。だから私はそこにも置く必要があります。私はすでにコードがリファクタリングされていると考えています。しかしそれは確かに良い考えです。 – cbmeeks

+1

TripItは、1つの結果に対して複数の異なるデータ構造を返していることを考えると(醜いですが、制御することはできません)、コード内の1つの要素に対して特別な処理をするのは不合理ではないようです。 –

+1

提案していただきありがとうございます。私は実際には、返されたデータがハッシュまたは配列であるかどうかをチェックしました。 TripItがそのような2つの完全なデータ構造を返すのは本当にうんざりです。とにかく、これは動作するように見えます:https://gist.github.com/758019 – cbmeeks

関連する問題