如何通过ActiveRecord查询结果通过哈希中的相应值进行排序?

时间:2018-01-17 20:11:16

标签: ruby-on-rails ruby activerecord hash

我有两个对象。

  1. ActiveRecord Collection
  2. 使用数字,记录ID对进行哈希
  3. 示例哈希: { 1=>10145, 2=>11543, 3=>50, 4=> 77534 }

    所以,我想根据哈希中的密钥为我的ActiveRecord查询订购相应的记录ID作为它的值。我怎么能这样做呢?

3 个答案:

答案 0 :(得分:0)

您可以改进存储排名/订单的数据结构。像,

{ record_id => order }

您可以通过执行此操作生成1

sorted_hash = hash.sort { |a, b| a.first <=> b.first }.each_with_object({}) { |a, m| m[a.last] = a.first }

ar_collection是您的ActiveRecord系列。

ar_collection.sort { |a, b| sorted_hash[a.id] <=> sorted_hash[b.id] }

你的哈希可能会遗漏一些数据,例如。记录ID:100,不是哈希值的一部分。

所以你可以避免这样的例外:

ar_collection.sort { |a, b| sorted_hash[a.id] || 0 <=> sorted_hash[b.id] || 0 }

缺少的排名将位于顶部。

答案 1 :(得分:0)

根据@ jvillian的评论,我最终找到了一个非常简单的解决方案。

record_ids = People.where(:position_id: 5).order(:last_name, :first_name).pluck(:id)
# Pass ids to my Active Job, and then finally in the partial do the following ...
People.where(id: record_ids).sort_by {|record| record_ids.index record.id }

谢谢!

答案 2 :(得分:0)

order_hash = { 1 => 10145, 2 => 11543, 3 => 50, 4 => 77534 }
User.find(order_hash.values)