Rails如何按特定顺序从数据库中对记录进行排序?

时间:2014-12-02 22:08:46

标签: ruby-on-rails ruby arrays sorting

我在URL中有一些表示ID的参数。在这个页面上,我打印出一个文章列表 - 通常在50到70之间。

在网址中是ID - 比如说 - 以这种格式:website.com/mark/articles/10/12/13/20(文章ID:10,12,13,20)。

我会将这些ID保存到一个数组中,同时在页面上打印出所有Mark的文章,我需要按照ID为1012的文章对文章进行排序,1320将位于列表的顶部。

如何实现这样的目标?

2 个答案:

答案 0 :(得分:2)

对于SQL解决方案,请检查mu的答案。使用Ruby:

articles = Article.where(id: ids).index_by(&:id).values_at(*ids) +
  Article.where.not(id: ids)

当然,如果您需要Relation而不是Array,SQL解决方案会更好。

答案 1 :(得分:1)

有两种方法可以做到这一点。纯红宝石或SQL。

普通的ruby版本可能更容易理解,也不容易受到SQL注入的影响:

article_ids_on_top = [10, 12, 13, 20]
articles = Article.all
top_articles = articles.select{|article| article_ids_on_top.include?(article.id) }
bottom_raticles = articles.reject{|article| article_ids_on_top.include?(article.id) }

@articles = top_articles + bottom_articles

SQL版:

article_ids_on_top = [10, 12, 13, 20]
@articles = Article.order("FIELD(id, [#{article_ids_on_top.join(',')})")