首页 > 解决方案 > 当用户查看所有文章时,首先查看自己的文章

问题描述

我们有两个模型

  1. 文章
  2. 用户

用户有很多我需要的文章当用户查看所有文章时,首先查看自己的文章。

我的点子

第一次查询返回与查询相关的文章

Article.where(user_id: user_id)

第二次查询

Article.where.not(user_id: user_id)

并合并结果

第二个想法 在ruby中获取所有文章并选择方法

但我需要最好的方法来做这个

标签: sqlruby-on-railsruby

解决方案


您可以运行一个查询,但使用 SQL 对文章进行排序,具体取决于它们是否匹配user_id

Article.order(Arel.sql("CASE user_id WHEN #{user_id} THEN 0 ELSE 1 END"))

注意:order不支持开箱即用的多个参数和输入清理。仅当您确定user_id仅包含有效的用户 ID 时才使用此选项,例如,正在使用current_user.id而不是user_id

在 Rails 7 中将有一个新的方法调用in_order_of,它允许编写相同的功能,如下所示:

Article.in_order_of(:user_id, user_id)

推荐阅读