Область ActiveRecord основана на дочернем условии области и включает тех детей с этим условием? - PullRequest
1 голос
/ 18 октября 2019

Как вы пишете область возвращает себя в зависимости от состояния потомка И включает ТОЛЬКО эти потомки в это условие.

Например, как я могу написать область, которая возвращает все Organizations, которые имеютопубликованные работы И включите эти опубликованные работы (исключая неопубликованные).

Для этого потребуется два запроса?

# Organization.rb
scope :with_published_jobs, lambda {
  joins(:jobs)
    .merge(Job.published)
    .includes(:jobs).where(published: true)
    # doesnt work
}

Модель организации

class Org < ApplicationRecord
  has_and_belongs_to_many :jobs, autosave: true
  ...

Модель задания ..

class Job < ApplicationRecord
  has_and_belongs_to_many :orgs

эти две модели связаны с таблицей соединений

1 Ответ

1 голос
/ 18 октября 2019

Один из способов сделать это - создать другую ассоциацию в модели вашей организации и использовать ее вместо jobs.

# Organization
has_and_belongs_to_many :published_jobs, -> { where(published: true) }, class_name: 'Job'
scope :with_published_jobs, -> { joins(:published_jobs).includes(:published_jobs) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...