我有两个对象。
示例哈希: { 1=>10145, 2=>11543, 3=>50, 4=> 77534 }
所以,我想根据哈希中的密钥为我的ActiveRecord查询订购相应的记录ID作为它的值。我怎么能这样做呢?
答案 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)