1. ホーム
  2. ruby-on-rails

[解決済み] ActiveRecord.find(array_of_ids), 順番を保持する。

2022-12-04 05:08:45

質問

あなたが Something.find(array_of_ids) を実行したとき、結果の配列の順番は array_of_ids .

検索を行い、順序を保持する方法はありますか?

ATM 私はIDの順序に基づいて手動でレコードを並べ替えますが、それはちょっとお粗末なものです。

UPD: もし、順番を指定するために :order パラメータと何らかの SQL 句を使用して順序を指定することが可能であれば、どのようにすればよいでしょうか?

どのように解決するには?

答えはmysqlのためだけである

mysqlには、以下のような関数があります。 FIELD()

.find()での使い方はこんな感じです。

>> ids = [100, 1, 6]
=> [100, 1, 6]

>> WordDocument.find(ids).collect(&:id)
=> [1, 6, 100]

>> WordDocument.find(ids, :order => "field(id, #{ids.join(',')})")
=> [100, 1, 6]

For new Version
>> WordDocument.where(id: ids).order("field(id, #{ids.join ','})")

更新しました。 これはRails 6.1で削除される予定です。 Railsのソースコード