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。如果你这样做了,请告诉我们它是如何进行的,因为我从未使用过它。
我有方法
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。如果你这样做了,请告诉我们它是如何进行的,因为我从未使用过它。