2017-09-26 76 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