2016-05-05 384 views
0

愚かな質問ですが、私はこれに答えを見つけることができず、私自身が解決しようとした試みはこれまでに果実を生み出していません。Ruby on Railsの日付でソートする?

ここにコードがあります。私は配列を作成します。次に、ループで複数のオブジェクトを作成し、配列に挿入します。次に、属性 'date'に基づいてソートを試みます。それから私はテストするために印刷します。それはすべて動作しますが、並べ替えのため:

<% @subject.list_people.each do |people| %> 
    <% people.people_family.each do |family| %> 
     <% family.find_friends.each do |friends| %> 

     myObj = {} 

     <% myObj['name1'] = people['name'].first %> 
     <% myObj['name2'] = family['name'].first %> 
     <% myObj['date'] = friends['date'].first %> 

     <% myArray << myObj %> 
     <% end %> 
    <% end %> 
    <% end %> 
    <% myArray = myArray.sort_by! { |obj| obj['date'] } %> //Sort the list based on field date 

<% myArray.each do |myObj| %> 
    <i><%= myObj['date'] %></i> 
<% end %> 

私は最も新しいものが最初に印刷されるようにしたいと思います。しかし、私が変更したものは、自分のデータが印刷される順序を編集しません。この日付欄ではどのように注文できますか?

+0

通常、Rubyの機能に!最後に、結果を変数に適用したいのではなく、結果を返すことを意味します。 "myArray ="部分は省略できます。また、この種の機能は一般に、ビューに実装したいものではありません(ただし、生成されるフォーマットはビュー固有のものです)。これをSubjectクラスの関数にして、結果の配列を返すことをお勧めします。 – ollpu

答えて

3

あなたが最も最近のオブジェクトから開始する必要があるので、あなたは、配列をreverceする必要があります。

myArray = myArray.sort_by { |obj| obj['date'] }.reverse 

Rubyでより最近の日付が少なく、最近、次に大きい:

Date.today > Date.today - 2 
=> true 
+1

@llya私はこのメッセージボードを本当に本当に愛している時があります。私はそれが簡単だとは信じられません。私は約1時間このトラブルシューティングを過ごしました。ありがとうございました! –

+0

@SimonKiely、あなたは大歓迎です。 – Ilya

関連する問題