当我在rails控制台中执行此操作时: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]
?感谢。
答案 0 :(得分:2)
这是一个原始的MySQL查询,它将生成您期望的输出:
SELECT *
FROM posts
WHERE
id IN (3, 1, 2)
ORDER BY
FIELD(id, 3, 1, 2)
LIMIT 11
我对ActiveRecord知之甚少,但我希望您需要将原始SQL用于上述ORDER BY
子句,并可能用于整个查询。这里的一个选择是运行整个原始查询:
sql = "SELECT * FROM posts ... ORDER BY FIELD(id, 3, 1, 2) LIMIT 11"
records_array = ActiveRecord::Base.connection.execute(sql)