在serchkick找到合适的结果后如何重新排序结果?

时间:2017-10-26 07:52:21

标签: mysql ruby-on-rails activerecord searchkick

当我在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]?感谢。

1 个答案:

答案 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)