2

「収入」でソートされた UserIds (一度に約 1000) のリストを受け取ります。「システムのデータベース」にユーザー レコードがありますが、「収入」列がありません。リストで受け取ったソート順で「システムのデータベース」からユーザーを取得したいと考えています。レコードがソート済みリストと同じ順序で取得されることを期待して、アクティブレコードを使用して次のことを試みましたが、機能しません。

//PSEUDO CODE
User.all(:conditions => {:id => [SORTED LIST]})

以下のリンクで同様の質問に対する回答を見つけましたが、Active Record を使用して提案されたソリューションを実装する方法がわかりません。

IN 値リストの ORDER BY

それを行う他の方法はありますか?

ガイドしてください。

シャードゥル。

4

2 に答える 2

6

回答へのリンクは、必要なものを正確に提供します。Rubyで柔軟にコーディングするだけで済みます。

このようなもの:

class User
  def self.find_as_sorted(ids)
    values = []
    ids.each_with_index do |id, index|
      values << "(#{id}, #{index + 1})"
    end
    relation = self.joins("JOIN (VALUES #{values.join(",")}) as x (id, ordering) ON #{table_name}.id = x.id")
    relation = relation.order('x.ordering')
    relation
  end
end

実際、それをモジュールに入れ、それを必要とする ActiveRecord クラスに簡単に組み込むことができます。これは、特定のクラス名を使用table_nameして実装されていないためです。self

于 2012-08-22T19:48:36.197 に答える
0

MySQL ユーザーはFIELD関数を介してこれを行うことができますが、Postgres にはそれがありません。ただし、この質問には回避策があります。Simulating the MySQL's ORDER BY FIELD() in Postgresql

于 2012-08-17T20:15:17.363 に答える