Рельсы глубоко вложенных соединений - PullRequest
1 голос
/ 20 сентября 2019

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

class Doctor < ApplicationRecord
  has_many :practices
  has_many :facilities, through: :practices
  has_one :address, as: :addressable
  ...
end

class Facility < ApplicationRecord
  has_many :practices
  has_many :doctors, through: :practices
  has_one  :address, as: :addressable
end

class Practice < ApplicationRecord
  belongs_to :doctor
  belongs_to :facility
end

class Address < ApplicationRecord
  belongs_to :addressable, polymorphic: true
  belongs_to :city
  belongs_to :state
  belongs_to :country
end

Врач может практиковать более одного раза в клинике.Я хочу использовать объединения (если нет более эффективного способа), чтобы найти список всех врачей, практикующих в городе.Я написал вложенные объединения как

Doctor.joins(facilities: [address: :city]) # Works

. Я не могу обойти проблему написания предложения where для указания названия города.

Doctor.joins(facilities: [address: [:city]]).where({facilities: {address: {city: {name: "Sydney"}}})

Я получаю ошибкуна котором написано

Mysql2::Error: Unknown column 'address.name' in 'where clause'

Пожалуйста, помогите!

1 Ответ

3 голосов
/ 20 сентября 2019

Вы загрузили от city до address, у вас есть пространство имен в памяти:

Doctor.joins(facilities: { address: :city }).where(cities: { name: city_name })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...