【问题标题】:Ordering Rails Array of Json's by the key "updated_at" 's value通过键“updated_at”的值对 Json 的 Rails 数组进行排序
【发布时间】:2016-02-24 17:23:11
【问题描述】:

我正在尝试按值对 json 数组进行排序。

我不能只使用 .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] => {"id"=>15, "user_id"=>2, "name"=>"新标题", "creator"=>nil, "size"=>nil, "mark_count"=>nil, "created_at "=>2016 年 2 月 14 日星期日 02:41:12 UTC +00:00,"updated_at"=>2016 年 2 月 14 日星期日 02:41:12 UTC +00:00 ... }

@all_things.sort_by { |a| a[:updated_at] } [4] => {"id"=>846, "item_id"=>669, "user_id"=>2, "created_at"=>2016 年 2 月 24 日星期三 16:43:54 UTC +00:00, "updated_at"=> 2016 年 2 月 24 日星期三 16:43:54 UTC +00:00, ...}

@all_things.sort_by { |a| a[:updated_at] } [50] => {"id"=>797, "item_id"=>623, "user_id"=>2, "created_at"=>2016 年 2 月 13 日星期六 03:58:29 UTC +00:00, "updated_at"=> 2016 年 2 月 13 日星期六 03:58:29 UTC +00:00, ...}

【问题讨论】:

  • @all_things@all_feed_cards 是同一个东西吗?
  • @kjprice 是的,抱歉已修复(代码仍然无法正常工作)

标签: ruby-on-rails ruby json


【解决方案1】:

您正在以旧的方式使用排序。试试看:

@all_things.sort_by { |a| a[:updated_at] }

【讨论】:

  • 返回一个'!! #>' for me
【解决方案2】:

我认为您只是错误地调用了#sort_by

 @all_things.sort_by { |thing| thing["updated_at"] }

由于您是按日期时间字符串排序的,因此可以将它们解析为 DateTime 对象:

 @all_things.sort_by { |thing| DateTime.httpdate(thing["updated_at"]) }

我也想建议,这可能是一个设计问题。对于联合两个类的具体问题,可以考虑单表继承。

【讨论】:

  • 每一行都为我返回一个!! #<NoMethodError: undefined method ``updated_at' for #<Hash:0xb80af74>>
  • 嗯,我不清楚您是在排序 ActiveRecord 对象还是 JSON。更新了我对 JSON 的回答。
  • 我已经尝试过你的答案,但它似乎对输出没有影响。见编辑 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多