idsはArrayで中にPostモデルの取り出したいidが先頭から順番に入っています。

ids = [23, 12, 34, 45, 9]

これとwhere句を使ってPostを取り出すことはできていますが、順番が意図している順序になりません。

> p = Post.where(id: ids)
> p
=> [#<Post id: 9, name: 'test_9'>,
#<Post id: 12, name: 'test_12'>,
#<Post id: 23, name: 'test_23'>,
#<Post id: 34, name: 'test_34'>,

これをidsの配列に格納した要素と同じ順番で取り出すにはどうすればいいのでしょうか?
つまり結果のPostを[23, 12, 34, 45, 9]の順に得たいと考えています。

Post.where(id: ids).sort_by{|o| ids.index(o.id)}

を考えましたが、この結果はArrayクラスで返ってくるため使えませんでした。
Postモデルで指定したscopeなどをこの後で利用するため、結果はPost::ActiveRecord_Relationで得る必要があります。