2017-09-26 81 views
0

通過屬性的對象數組排序我有對象紅寶石 - 按降序排列

"students": [{ 
    "id": 1, 
    "first_name": "John", 
    "last_name": "Doe", 
    "age": "14", 
    }, { 
    "id": 2, 
    "first_name": "Victoria", 
    "last_name": "Secret", 
    "age": "9", 
    }, { 
    "id": 3, 
    "first_name": "Jim", 
    "last_name": "Morrison", 
    "age": "16", 
    }, { 
    "id": 4, 
    "first_name": "Jack", 
    "last_name": "Daniels", 
    "age": "7", 
    }, 
    }] 

我想在我的index.html.erb通過年齡排序在DESC爲了顯示他們的這個JSON數組。我在那裏一半,我已經設法排序他們,但不是在確切的DESC順序。這是我的循環

<% @classroom['students'].sort_by { |st| st['age'] }.each do |student| %> 

這是我想要的結果:

16, Jim,  Morrison 
14, John, Doe 
9, Victoria, Secret 
7, Jack,  Daniels 

這是我所得到的,而不是:

14, John, Doe 
16, Jim,  Morrison 
7, Jack,  Daniels 
9, Victoria, Secret 

回答

1

你錯過了做時代的一些

@classroom['students'].sort_by { |st| -st['age'].to_i } 

我添加了一個-因爲你想要它們以降序排列。否則

@classroom['students'].sort_by { |st| st['age'].to_i }.reverse 
+0

正確的,也有斑點!還有一個問題,如果這是好的。是否認爲在我的視圖中有'sort_by'塊被認爲是最好的做法,然後附加'.each'來循環對象,或者有更好的方法來做到這一點?只是爲了更好的可讀性 – Lykos

+0

我要離開了'sort_by'東西的動作,並在視圖只是'@students.each do' – Ursus

+0

對不起只是一個問題。每個學生都有一個出生日期屬性,例如'1997-09-26T10:40:00.000 + 01:00',如何將日期轉換爲人類可讀格式?我試圖'​​<%=學生[ 'DOB']的strftime( '%D-%間 - %Y,%H:%M')%>',但是這破壞了代碼 – Lykos