通过键“updated_at”的值

时间:2016-02-24 17:23:12

标签: ruby-on-rails ruby json

我正在尝试按值排序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,...}

  

2 个答案:

答案 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]}