у меня 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: через отношения.
Заранее спасибо.