PG :: UndefinedColumn: ERROR: столбец services.zip_code не существует - PullRequest
0 голосов
/ 19 марта 2020

У меня есть 2 модели (Service и Town) с отношением :has_many :through. Я хочу, чтобы можно было найти все службы города и каждого города службы.

Кроме того, передо мной никогда не будет возможности увидеть свой идентификатор города, поэтому я могу связать службу и город только с zip_code город.

Вот все мои миграции

create_table :services, type: :uuid do |t|
  t.string :name,     null: false
  t.string :action,   null: false
  t.string :kind,     null: false
end

create_table :towns do |t|
  t.string :name,     null: false
  t.stirng :zip_code, null: false
  t.string :country,  null: false
end

create_table :services_towns do |t|
  t.belongs_to :service
  t.belongs_to :town

  t.string :zip_code, null: false

  t.index :zip_code
end

вот мои модели


class Town < ApplicatonRecord
  has_many :services_towns, primary_key: :zip_code, foreign_key: :zip_code
  has_many :services,       through: :services_communes
end

class Service < ApplicationRecord
  has_many :services_towns
  has_many :towns, through: :services_communes
end

class ServicesTown < ApplicationRecord
  belongs_to :service
  belongs_to :town, primary_key: :zip_code, foreign_key: :zip_code
end

@service.towns и @town.services хорошо работают в моей консоли rails но если я попытаюсь выполнить более сложный поиск, например Service.where(towns: [towns_array]), я получу следующую ошибку

PG::UndefinedColumn: ERROR:  column services.zip_code does not exist

С этим запросом я хотел бы получить все службы из каждого города, которые я передал в массиве.

Думаю, проблема в моих primary_key или foreign_key, но я не знаю, что делать лучше

1 Ответ

2 голосов
/ 19 марта 2020

Вам нужно исправить запрос, попробуйте это

Service.joins(:towns).where(towns: { zip_code: towns_array })

или

Service.joins(:towns).where("towns.zip_code IN (?)", towns_array)    

Надеюсь, это поможет!

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