ruby-on-rails - 我可以使用 Arel 创建的别名作为包含的一部分而不是加入来进行急切获取吗
问题描述
我有一个自引用关系,其中员工将引用与其主管相同的表。我需要查询表并能够按“supervisor.first_name”排序,技术上是“employees.first_name”。我能够使用 Arel 创建一个连接,但是我需要急切地获取它,以便我可以在order
子句中使用该别名。
immediate_supervisor_alias = Employee.arel_table.alias(:supervisor)
supervisor_join = immediate_supervisor_alias.create_on(
Employee.arel_table[:id].eq(immediate_supervisor_alias[:id])
)
然后我像这样使用它......
@employees = Employee.joins(
Employee.arel_table.create_join(
immediate_supervisor_alias, supervisor_join, Arel::Nodes::OuterJoin
)
)
.includes(...)
.order('supervisor.first_name ASC')
这可行,但无法排序,因为主管是延迟加载的。我需要它是一个,includes
但我找不到任何关于如何在那里使用别名的信息。Arel API 文档没有太大帮助。
解决方案
好吧,我让它工作了。我不知道这是否是最好的方法,但它确实有效,所以除非有人提出更好的答案,否则称之为好。
@employees = Employee.joins(
Employee.arel_table.create_join(
immediate_supervisor_alias, supervisor_join, Arel::Nodes::OuterJoin
)
)
.select('supervisor.id, supervisor.last_name, supervisor.first_name')
.includes(...)
.order('supervisor.first_name ASC')
注意添加select
.
推荐阅读
- javascript - csrf 同源策略不会阻止读取响应?
- flutter - Flutter/Dart - 安排一个 Mysql 查询每隔几分钟运行一次?
- vue.js - Vue服务器端渲染:beforeCreate钩子中的错误:ReferenceError:未定义文档
- docker - Docker:在 Buildkit 中使用 SSH
- python - 如何使用 Selenium 获取动态 html?
- java - 从 IntelliJ IDE 运行我的测试时出现“找不到或加载主类 @tag”错误
- css - 如何使用 dart sass 模块(@use、@forward 等)到处传播配置?
- sql - GCP BigQuery - LIMIT but full table read - 如何将查询的数据限制在最低限度
- reactjs - 如何在 React js 中使用 select 选项验证多个数组控制器?
- roc - ROC 曲线只有正面和负面的测试结果,但没有基本事实