当用户查看所有文章时,先查看自己的文章

我们有两个模型

  1. 文章
  2. 用户

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

我的点子

  • 做两个查询

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

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)


以上是当用户查看所有文章时,先查看自己的文章的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>