微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rails ActiveRecord 中用于查询和子查询的 Arel 节点的正确组合

如何解决Rails ActiveRecord 中用于查询和子查询的 Arel 节点的正确组合

我正在尝试使用 Arel 下面的子查询来实现 sql

students.classroom_id IN ( SELECT id FROM classrooms WHERE name IN ('foo','bar') )

我尝试了以下组合

Student.arel_table[:classroom_id].in(
  Classroom.where(
    Classroom.arel_table[:name].in(
      ['foo','bar']
    )
  ).select(:id)
)

但是当我对其执行 .to_sql 时,它返回

students.classroom_id IN ( NULL NULL NULL NULL )

任何帮助将不胜感激。

解决方法

如果没有 Arel,您确定无法实现这一目标吗?

Student.where(classroom: Classroom.where(name: ['foo','bar']))
,

我使用 FF 组合实现了目标输出:

subquery = Arel::Nodes::SqlLiteral.new Classroom.where(name: ['foo','bar'].select(:id).to_sql

Student.arel_table[:classroom_id].in(subquery)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。