我正在尝试按值排序jsons数组。
我不能只用.order('created_at DESC')
查询数据库,因为我的数组中充满了来自2个不同表的信息。
这是我到目前为止的代码:
@user_items = UserItem.where(user_id: @friends.to_a).order('created_at DESC')
@user_pics = Pic.where(user_id: @friends.to_a).order('created_at DESC')
@all_things = @user_pics + @user_items
@all_things.sort_by{"updated_at"}
这不是错误,但是当我运行代码时,列表中的第一件事总是所有图片都跟着所有项目。因此,似乎列表行代码无效。
以下是user_pics[0]
的示例:
{"id"=>15, "user_id"=>2, "name"=>"New titles", "creator"=>nil, "size"=>nil, "created_at"=>Sun, 14 Feb 2016 02:41:12 UTC +00:00, "updated_at"=>Sun, 14 Feb 2016 02:41:12 UTC +00:00 ...}
编辑1
可悲的是,建议的答案似乎没有奏效。以下是一些不同的输出。首先,2月14日更新的图片,然后分别在2月24日和2月13日更新的项目。似乎数组仍然按照所有图片排序,然后是所有项目。
@ all_things.sort_by {| a | a [:updated_at]} [0] =&GT; {“id”=&gt; 15,“user_id”=&gt; 2,“name”=&gt;“新标题”,“创建者”=&gt; nil,“size”=&gt; nil,“mark_count”=&gt; nil,“created_at”=&gt;太阳,2016年2月14日02:41:12 UTC +00:00,“updated_at”=&gt;太阳,2016年2月14日02:41:12 UTC +00:00 ...} < / p>
@ all_things.sort_by {| a | a [:updated_at]} [4] =&GT; {“id”=&gt; 846,“item_id”=&gt; 669,“user_id”=&gt; 2,“created_at”=&gt;星期三,2016年2月24日16:43:54 UTC +00:00,“updated_at” =&gt;星期三,2016年2月24日16:43:54 UTC +00:00,...}
@ all_things.sort_by {| a | a [:updated_at]} [50] =&GT; {“id”=&gt; 797,“item_id”=&gt; 623,“user_id”=&gt; 2,“created_at”=&gt;星期六,2016年2月13日03:58:29 UTC +00:00,“updated_at” =&gt;星期六,2016年2月13日03:58:29 UTC +00:00,...}
答案 0 :(得分:0)
我认为您只是错误地调用#sort_by
:
@all_things.sort_by { |thing| thing["updated_at"] }
由于您按日期时间字符串排序,因此可以将它们解析为DateTime对象:
@all_things.sort_by { |thing| DateTime.httpdate(thing["updated_at"]) }
我也想建议,这可能是一个设计问题。对于联合两个类的特定问题,您可以考虑单表继承。
答案 1 :(得分:0)
您正在使用这种方式进行排序。试试这个:
@ all_things.sort_by {| a | a [:updated_at]}