当用户查看所有文章时,先查看自己的文章
我们有两个模型
- 文章
- 用户
用户有很多我需要的文章 当用户查看所有文章时,首先查看他们自己的文章。
我的点子
- 做两个查询
第一个查询返回与查询相关的文章
Article.where(user_id: user_id)
第二次查询
Article.where.not(user_id: user_id)
并合并结果
第二个想法
在ruby中获取所有文章并选择方法
但我需要最好的方法来做到这一点
- 我使用 Ruby On Rails 6.1 和 Ruby 3
回答
您可以运行一个查询,但使用 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)