我在URL中有一些表示ID的参数。在这个页面上,我打印出一个文章列表 - 通常在50到70之间。
在网址中是ID - 比如说 - 以这种格式:website.com/mark/articles/10/12/13/20
(文章ID:10,12,13,20)。
我会将这些ID保存到一个数组中,同时在页面上打印出所有Mark的文章,我需要按照ID为10
,12
的文章对文章进行排序,13
和20
将位于列表的顶部。
如何实现这样的目标?
答案 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(',')})")