У меня есть 4 модели: Catalog
, Product
, Value
и Characteristic
.В каталоге много товаров, товар имеет много значений, а значение принадлежит признаку и товару.
Таким образом:
продукт имеет catalog_id
значение имеет product_id
и characteristic_id
признак не имеет внешнего ключа, связывающего эти модели
- признак имеет много значений
Iхочу найти характеристики для значений данной коллекции продуктов, принадлежащих каталогу, без загрузки всех продуктов и всех значений.
Что я мог бы сделать, но кажется крайне неэффективным:
@products = Product.where(catalog_id: @catalog.id)
@characteristics = Value.distinct.where(value_id: @products.pluck(:id)).pluck(:characteristic_id)
Вот что я пробовал:
Characteristic.joins(value: :product).where(values:{products:{catalog_id: @catalog.id}})
Но я получаю эту ошибку:
Can't join 'Characteristic' to association named 'value'; perhaps you misspelled it?
Где я что-то упустил?