Rails用于查询的相同数组查询和排序

时间:2015-10-11 22:06:55

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有方法

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]

有什么想法吗?

1 个答案:

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