sparksofl
11/7/2016 - 1:17 PM

console.rb

  def available_jobs
    suitable_jobs.joins('LEFT JOIN invites ON jobs.id = invites.job_id')
                 .where('(invites.person_id = ? AND jobs.accessibility = ?) OR
                         jobs.accessibility = ?',
                           id,
                           Job.accessibilities[:closed],
                           Job.accessibilities[:shared])
  end

  def available_jobs_without_conversation
    available_jobs
        .joins('FULL JOIN job_events ON jobs.id = job_events.job_id')
        .where('job_events.interpreter_id <> ?', id)
  end

  def available_jobs_with_conversation
    available_jobs
        .joins('FULL JOIN job_events ON jobs.id = job_events.job_id')
        .where('job_events.interpreter_id = ?', id)
  end
2.2.4 :015 > Person.find(150).available_jobs_without_conversation.ids.include? 895
  Person Load (0.7ms)  SELECT  "people".* FROM "people" WHERE "people"."id" = $1 LIMIT 1  [["id", 150]]
  Job Load (1.1ms)  SELECT "jobs".* FROM "jobs" INNER JOIN "job_applications" ON "job_applications"."job_id" = "jobs"."id" WHERE (job_applications.status IN ('applied','accepted') AND
                      job_applications.person_id = 150)
  Job Load (20.9ms)  SELECT "jobs".* FROM "jobs" LEFT JOIN jobs AS jobs_view ON
                 (jobs.start_time + interval '1 hours' * jobs.duration > jobs_view.start_time AND
                 jobs.start_time < jobs_view.start_time + interval '1 hours' * jobs_view.duration AND
                 jobs.id <> jobs_view.id)
                LEFT JOIN job_applications AS jobs_view_applications ON
                 jobs_view.id = jobs_view_applications.job_id WHERE (jobs_view_applications.status IN ('applied','accepted') AND
                jobs_view_applications.person_id = 150)
  Job Load (1.0ms)  SELECT "jobs".* FROM "jobs" INNER JOIN "job_applications" ON "job_applications"."job_id" = "jobs"."id" WHERE (job_applications.status IN ('applied','accepted') AND
                      job_applications.person_id = 150)
  Job Load (19.1ms)  SELECT "jobs".* FROM "jobs" LEFT JOIN jobs AS jobs_view ON
                 (jobs.start_time + interval '1 hours' * jobs.duration > jobs_view.start_time AND
                 jobs.start_time < jobs_view.start_time + interval '1 hours' * jobs_view.duration AND
                 jobs.id <> jobs_view.id)
                LEFT JOIN job_applications AS jobs_view_applications ON
                 jobs_view.id = jobs_view_applications.job_id WHERE (jobs_view_applications.status IN ('applied','accepted') AND
                jobs_view_applications.person_id = 150)
  Job Load (1.0ms)  SELECT "jobs".* FROM "jobs" INNER JOIN "job_applications" ON "job_applications"."job_id" = "jobs"."id" WHERE (job_applications.status IN ('applied','accepted') AND
                      job_applications.person_id = 150)
  Job Load (21.5ms)  SELECT "jobs".* FROM "jobs" LEFT JOIN jobs AS jobs_view ON
                 (jobs.start_time + interval '1 hours' * jobs.duration > jobs_view.start_time AND
                 jobs.start_time < jobs_view.start_time + interval '1 hours' * jobs_view.duration AND
                 jobs.id <> jobs_view.id)
                LEFT JOIN job_applications AS jobs_view_applications ON
                 jobs_view.id = jobs_view_applications.job_id WHERE (jobs_view_applications.status IN ('applied','accepted') AND
                jobs_view_applications.person_id = 150)
  Job Load (1.0ms)  SELECT "jobs".* FROM "jobs" INNER JOIN "job_applications" ON "job_applications"."job_id" = "jobs"."id" WHERE (job_applications.status IN ('applied','accepted') AND
                      job_applications.person_id = 150)
  Job Load (21.0ms)  SELECT "jobs".* FROM "jobs" LEFT JOIN jobs AS jobs_view ON
                 (jobs.start_time + interval '1 hours' * jobs.duration > jobs_view.start_time AND
                 jobs.start_time < jobs_view.start_time + interval '1 hours' * jobs_view.duration AND
                 jobs.id <> jobs_view.id)
                LEFT JOIN job_applications AS jobs_view_applications ON
                 jobs_view.id = jobs_view_applications.job_id WHERE (jobs_view_applications.status IN ('applied','accepted') AND
                jobs_view_applications.person_id = 150)
  ScheduleEvent Load (0.3ms)  SELECT "schedule_events".* FROM "schedule_events" WHERE "schedule_events"."person_id" = $1  [["person_id", 150]]
   (2.7ms)  SELECT DISTINCT "jobs"."id" FROM "jobs" INNER JOIN interpreter_skills ON
        (jobs.lang_from_id = interpreter_skills.lang_from_id AND
        jobs.lang_to_id = interpreter_skills.lang_to_id) OR
        (jobs.lang_from_id = interpreter_skills.lang_to_id AND
        jobs.lang_to_id = interpreter_skills.lang_from_id)
      LEFT JOIN qualifications AS skill_qualifications ON
        interpreter_skills.qualification_id = skill_qualifications.id
      LEFT JOIN qualifications AS job_qualifications ON
        jobs.qualification_id = job_qualifications.id LEFT JOIN invites ON jobs.id = invites.job_id FULL JOIN job_events ON jobs.id = job_events.job_id WHERE "jobs"."status" = $1 AND (      interpreter_skills.person_id = 150 AND
      jobs.person_id <> 150 AND
      (skill_qualifications.priority <= job_qualifications.priority OR
        job_qualifications.default = true OR
        jobs.qualification_id IS NULL)
) AND (jobs.sex IS NULL OR jobs.sex = 2) AND (jobs.id NOT IN (736,826,539,829,802,831,894,787,322,324,442,748,918,949,818,732,820,238,238,238,238,238,238,243,244,245,281,819,299,300,305,352,326,327,343,344,346,306,386,393,428,419,427,445,450,345,468,471,489,503,504,821,541,952)) AND (jobs.assignment_type IN (0,1,2,3)) AND ((invites.person_id = 150 AND jobs.accessibility = 1) OR
                         jobs.accessibility = 0) AND (job_events.interpreter_id != 150)  [["status", "active"]]
 => true

2.2.4 :014 > Job.find(895).job_events.pluck(:interpreter_id)
  Job Load (0.3ms)  SELECT  "jobs".* FROM "jobs" WHERE "jobs"."id" = $1 LIMIT 1  [["id", 895]]
   (0.5ms)  SELECT "job_events"."interpreter_id" FROM "job_events" WHERE "job_events"."job_id" = $1  [["job_id", 895]]
 => [150, 150, 66, 66, 66, 66, 150]