我有方法
def self.get_ayahs_by_array(ayahs_keys_array)
self.where(ayah_key: ayahs_keys_array)
end
对Quran::Ayah
模型进行查询。 ayahs_keys_array
是按特定顺序的键数组(primary_key)。查询返回不同的顺序,但我希望它以与查询数组相同的顺序返回。
示例:ayahs_keys_array
为[5,4,1,2,7]
,我希望它以此顺序返回,而不是[1,2,4,5,7]
有什么想法吗?
答案 0 :(得分:1)
在MySql中:
self.where(ayah_key: ayahs_keys_array).order("FIELD(ayah_key, #{ ayahs_keys_array.joins(', ') })")
因为你需要构建整个CASE语句,所以postgres稍微复杂一些。在应用程序级别可能更容易做到:
self.where(ayah_key: ayahs_keys_array).order_by {|r| ayahs_keys_array.index r.ayah_key}
最后,你可以尝试这个宝石:https://github.com/panorama-ed/order_as_specified。如果你这样做,请告诉我们它是如何进行的,因为我从未使用它。