У меня есть 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
, но я не знаю, что делать лучше