sql - 当用户查看所有文章时,首先查看自己的文章
问题描述
我们有两个模型
- 文章
- 用户
用户有很多我需要的文章当用户查看所有文章时,首先查看自己的文章。
我的点子
- 做两个查询
第一次查询返回与查询相关的文章
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)
推荐阅读
- css - 在不知道高度的情况下如何获得砌体布局?
- python - 如何在并行线程中调用 sum 函数并将数组中的数字传递给 Python 中的函数?
- powerbi - 如何为表格或矩阵视觉创建参数列/可编辑列?
- javascript - _0x5140b1前面的“~”是什么?
- r - 有没有办法将 clob 转换为 R 中的字符?
- python - 如何在Python中的仅节点图中找到输入节点列表的最短路径
- java - 将自定义登录页面的多个 IP 地址列入白名单 - OAuth2.0
- python-3.7 - 在树莓派上运行 YOLOv4 tiny
- python - 将 qpushbutton 连接到 lambda
- angular - 根据条件停止出现 Mat 对话框