Как совместить два соединения. Где-то в рельсах - PullRequest
0 голосов
/ 19 сентября 2018

Помогите объединить запрос в одну большую, ну или грамматическую форму, чтобы для каждой компании существовали точечные приложения, в которых

Вот 2 отдельно работающих строки запроса.

DotApplication.all.joins(:current_stage_event).where(current_stage_event: {event: "prospect"}).joins('LEFT JOIN tasks on tasks.subject_id = dot_applications.id').where(tasks: {id: nil})

Company.all.joins(:users).where(users: { notification_for_active_prospects: true})

Что я хочу:

Company.each do |company|
  # For each company(with joins,where above), find all dot_applications as in the examples above
end

Связь между Company и DotApplication выглядит следующим образом:

# app/models/company.rb
class Comany < ApplicationRecord
  has_many :dot_aplications
end

# app/models/dot_application.rb
class DotApplication < ApplicationRecord
  belongs_to :company
end

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018
Company.joins(:dot_applications)
       .where(dot_appplications: DotApplication.joins(:current_stage_event)
                                               .where(current_stage_event: {event: "prospect"})
                                               .joins('LEFT JOIN tasks on tasks.subject_id = dot_applications.id')
                                               .where(tasks: {id: nil}))
       .joins(:users)
       .where(users: { notification_for_active_prospects: true})

Это должно найти все компании, отвечающие вашим требованиям для DotApplication, а затем запросить эти компании для User требований

0 голосов
/ 19 сентября 2018

Вы можете присоединиться к вложенным ассоциациям, как это joins(company: :users)

В вашем случае это может сделать работу

DotApplication.joins(company: :user).where(users: { notification_for_active_prospects: true})

Или полная версия

 DotApplication.all.joins(:current_stage_event, company: :user).where(current_stage_event: {event: "prospect"}).joins('LEFT JOIN tasks on tasks.subject_id = dot_applications.id').where(tasks: {id: nil}).where(users: { notification_for_active_prospects: true})

НоЯ действительно не рекомендую вам делать это, так как это абсолютно не поддерживается

Вы можете прочитать этот пост, если хотите узнать больше о соединениях https://www.learneroo.com/modules/137/nodes/768

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...