【问题标题】:Proper combination of Arel nodes for Query with Subqueries in Rails ActiveRecord在 Rails ActiveRecord 中正确组合查询与子查询的 Arel 节点
【发布时间】:2021-06-04 11:31:58
【问题描述】:

我正在尝试使用 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 )

任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails postgresql arel


    【解决方案1】:

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

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

    【讨论】:

    • 它只是查询的一部分,我需要在该 SQL 之后链接一个“或”语句,所以我真的打算使用 Arel 来完成它。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多