2017-10-26 9 views
3

私はレールコンソールでこれを行います:posts = Post.active.search('lorem').recordsそれは私にこれを与えます:Post Load (0.9ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`id` IN (3, 1, 2) LIMIT 11しかし、私がposts.pluck(:id)を行うときは[1, 2, 3]です。したがって、あなたが見ることができるように、順序は同じではなく、クエリ内にあるので、[3, 1, 2]でなければなりません。どうすれば結果を並べ替えることができますか?[3, 1, 2]?ありがとう。ここでSerchkickが適切な結果を見つけた後に結果を並べ替える方法は?

答えて

2

は、あなたが期待する出力を生成します生のMySQLのクエリです:

SELECT * 
FROM posts 
WHERE 
    id IN (3, 1, 2) 
ORDER BY 
    FIELD(id, 3, 1, 2) 
LIMIT 11 

私はActiveRecordのについて少し知識を持っているが、私はあなたが上記のORDER BY句の生のSQLを使用する必要があるだろうと期待し、おそらく全体のクエリのために。 1つのオプションは、生のクエリ全体を実行することです:

sql = "SELECT * FROM posts ... ORDER BY FIELD(id, 3, 1, 2) LIMIT 11" 
records_array = ActiveRecord::Base.connection.execute(sql) 
関連する問題