Вложенные соединения в Rails

0

У меня есть 3 модели Company, User, Loan в приложении Rails

company.rb

class Company < ApplicationRecord
  has_many :users
end

Company id: 1, name: "A", created_at: "2018-02-06 07:34:17", updated_at: "2018-02-06 07:34:17"
Company id: 2, name: "B", created_at: "2018-02-06 07:34:19", updated_at: "2018-02-06 07:34:19"
Company id: 3, name: "C", created_at: "2018-02-06 07:34:21", updated_at: "2018-02-06 07:34:21"

user.rb

class User < ApplicationRecord
  belongs_to :company
  has_many :loans
end

User id: 1, name: "Sachin", company_id: 1, created_at: "2018-02-06 07:35:53", updated_at: "2018-02-06 08:02:41", user_status: true
User id: 2, name: "Ghanshyam", company_id: 1, created_at: "2018-02-06 07:36:01", updated_at: "2018-02-06 08:02:41", user_status: false
User id: 3, name: "Anand", company_id: 1, created_at: "2018-02-06 07:36:06", updated_at: "2018-02-06 08:02:41", user_status: false
User id: 4, name: "Ghanshyam Rahul", company_id: 1, created_at: "2018-02-06 07:36:15", updated_at: "2018-02-06 08:02:41", user_status: false
User id: 5, name: "Anand", company_id: 3, created_at: "2018-02-06 07:43:56", updated_at: "2018-02-06 08:02:41", user_status: false
User id: 6, name: "Ghanshyam", company_id: 3, created_at: "2018-02-06 07:43:58", updated_at: "2018-02-06 08:02:41", user_status: false

loan.rb

class Loan < ApplicationRecord
  belongs_to :user
end

Loan id: 1, name: "loan 1", user_id: 1, created_at: "2018-02-06 07:44:46", updated_at: "2018-02-06 07:44:46"
Loan id: 5, name: "loan 5", user_id: 1, created_at: "2018-02-06 07:44:54", updated_at: "2018-02-06 07:44:54"
Loan id: 6, name: "loan 6", user_id: 6, created_at: "2018-02-06 07:45:33", updated_at: "2018-02-06 07:45:33"
Loan id: 7, name: "loan 7", user_id: 6, created_at: "2018-02-06 07:45:34", updated_at: "2018-02-06 07:45:34"
Loan id: 8, name: "loan 8", user_id: 6, created_at: "2018-02-06 07:45:36", updated_at: "2018-02-06 07:45:36"

Я хочу записать запрос соединения (один запрос), который отображает список компаний, если у пользователей есть какой-либо кредит, например:

Company id: 1, name: "A", created_at: "2018-02-06 07:34:17", updated_at: "2018-02-06 07:34:17"
Company id: 3, name: "C", created_at: "2018-02-06 07:34:21", updated_at: "2018-02-06 07:34:21"
Теги:
database
join

2 ответа

1
Company.joins(users: [:loans]).group('companies.id')

Чтобы избежать возможных дубликатов компаний, я бы поместил группу компаний по полю id компании.

1
Company.joins(users: :loans).distinct

Дадут вам все компании, у которых есть пользователи с кредитом

Вы создаете запрос join, который присоединяется к компании со своими пользователями, и дает вам компании с пользователями, а затем присоединяется к пользователям с их кредитами. Поскольку он использует внутреннее соединение, когда у пользователей нет компании, они не появляются, и их компании не появляются ни

Ещё вопросы

Сообщество Overcoder
Наверх
Меню