У меня 4 модели. Product
, ProductMachines
(соединяет таблицу с атрибутом номера детали), Machine
и Brand
. По сути, таблица Product
принадлежит многим Machines
. Машина принадлежит Brand
. Эта структура позволяет мне связать продукт с разными машинами разных марок, указав уникальный номер детали для каждой машины в таблице соединений для Products
и Machines
. Я пытаюсь найти таблицу Product
вместе со всеми связанными данными, упомянутыми ниже. Однако у меня возникают проблемы с правильной индексацией всех связанных данных.
class Brand < ApplicationRecord
has_many :machines
end
class Machine < ApplicationRecord
belongs_to :brand
has_many :product_machines, dependent: :destroy
has_many :products, through: :product_machines
end
class ProductMachines < ApplicationRecord
belongs_to :machine
belongs_to :product
end
class Product < ApplicationRecord
has_many :product_machines, dependent: :destroy
has_many :machines, through: :product_machines
searchable do
text :name
text :machines do
machine.name
#how would I index the brand name (parent of machine)
#how would I also index the part number field that is on the ProductMachines table?
end
end
end
Я понимаю, что мне нужно либо реализовать соединение, либо добавить несколько текстовых полей для индексов, как показано ниже:
searchable do
text :name
text :machines do
machines.name
end
text :product_machines do
product_machines.map(&:part_number)
end
text :brands do
brands.map(&:name)
end
end
Однако, используя эту реализацию, я понял, что если бы я отфильтровал марку с помощью чего-то вроде with(:brand, "my brand")
, то фильтр не исключил бы имена машин, которые явно связаны с ДРУГОЙ маркой. Однако я не знаю, как это подтвердить. Вот где мне нужна помощь. Я бы реализовал и протестировал соединение для всех своих моделей, но я могу найти документацию только для соединения двух напрямую связанных моделей; не модели с отношением has_many :through.
Заранее спасибо.