Ruby — Как найти клиента с помощью вложенного соединения

#ruby #postgresql

#ruby #postgresql

Вопрос:

У меня есть следующие отношения:

 class Location < ApplicationRecord
  has_many :weddings

class Wedding < ApplicationRecord
  has_many :wedding_memberships

class WeddingMembership < ApplicationRecord
  belongs_to :wedding
  belongs_to :customer

class Customer < ApplicationRecord
  has_many :wedding_memberships
 

И то, что я хотел бы найти, это Customer s в Location с id: 1

Мои попытки WeddingMembership.joins(:wedding).where(wedding: {location_id: 1}) выдают следующие ошибки: Caused by PG::UndefinedTable: ERROR: missing FROM-clause entry for table "wedding"

Комментарии:

1. WeddingMembership.joins(:wedding).where(weddings: {location_id: 1}) , weddings , там вам нужно имя таблицы

2. @Ursus это работает, однако он возвращается WeddingMemberships , когда мне нужно Customers

Ответ №1:

Попробуйте это, это множественное соединение с предложением where на вашем location_id

 Customer.joins(wedding_memberships: :wedding)
        .where(weddings: { location_id: 1 })
        .distinct
 

Комментарии:

1. Да, я тоже туда собирался.. но когда я пытаюсь это сделать, я получаю ActiveRecord::ConfigurationError: Can't join 'Customer' to association named 'wedding'; perhaps you misspelled it?

2. Вы уверены, что пробовали с моим тем же joins предложением? Если ваши ассоциации верны, это должно сработать

3. Я думаю, вы пропустили wedding_memberships в joins предложении

4. Ааааа, я сделал это (wedding_memberships: :wedding) неправильно.. большое спасибо!

5. Я, вероятно, пропустил distinct в конце