LEFT OUTER JOIN in Rails 4

前端 未结 12 1727
一整个雨季
一整个雨季 2020-11-28 09:44

I have 3 models:

class Student < ActiveRecord::Base
  has_many :student_enrollments, dependent: :destroy
  has_many :courses, through: :student_enrollment         


        
12条回答
  •  南方客
    南方客 (楼主)
    2020-11-28 10:20

    If anyone came here looking for a generic way to do a left outer join in Rails 5, you can use the #left_outer_joins function.

    Multi-join example:

    Ruby:

    Source.
     select('sources.id', 'count(metrics.id)').
     left_outer_joins(:metrics).
     joins(:port).
     where('ports.auto_delete = ?', true).
     group('sources.id').
     having('count(metrics.id) = 0').
     all
    

    SQL:

    SELECT sources.id, count(metrics.id)
      FROM "sources"
      INNER JOIN "ports" ON "ports"."id" = "sources"."port_id"
      LEFT OUTER JOIN "metrics" ON "metrics"."source_id" = "sources"."id"
      WHERE (ports.auto_delete = 't')
      GROUP BY sources.id
      HAVING (count(metrics.id) = 0)
      ORDER BY "sources"."id" ASC
    

提交回复
热议问题