Rails 使用与查询相同的数组进行查询和排序

Rails query and order with same array used for query

我有方法

def self.get_ayahs_by_array(ayahs_keys_array)
  self.where(ayah_key: ayahs_keys_array)
end

它对 Quran::Ayah 模型进行查询。 ayahs_keys_array 是按特定顺序排列的键 (primary_key) 数组。查询 return 的顺序不同,但我希望它 return 与查询数组的顺序相同。

示例:ayahs_keys_array[5,4,1,2,7],我希望它按此顺序 return 而不是 [1,2,4,5,7]

有什么想法吗?

在MySql中:

self.where(ayah_key: ayahs_keys_array).order("FIELD(ayah_key, #{ ayahs_keys_array.joins(', ') })")

对于 postgres 稍微复杂一些,因为您需要构建整个 CASE 语句。在应用程序级别可能更容易做到:

self.where(ayah_key: ayahs_keys_array).order_by {|r| ayahs_keys_array.index r.ayah_key}

最后,您可以试试这个 gem:https://github.com/panorama-ed/order_as_specified。如果你这样做了,请告诉我们它是如何进行的,因为我从未使用过它。