【问题标题】:Rails query and order with same array used for queryRails 查询和排序与用于查询的相同数组
【发布时间】:2015-10-11 22:06:55
【问题描述】:

我有办法

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]

有什么想法吗?

【问题讨论】:

  • 您可以使用scope 自定义查询的顺序。
  • 你使用什么数据库?

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


【解决方案1】:

在 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。如果你这样做了,请告诉我们它是怎么回事,因为我从未使用过它。

【讨论】:

  • 我最终也做了这样的事情.sort{|e1, e2| ayahs_keys_array.index(e1.ayah_key) <=> ayahs_keys_array.index(e2.ayah_key)} 因为order_by 抛出一个错误
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多