Присоединяйтесь к двум ассоциациям - PullRequest
0 голосов
/ 13 июня 2018

У меня есть 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?

Где я что-то упустил?

1 Ответ

0 голосов
/ 13 июня 2018

Из того, что вы написали в вопросе, модель Characteristic связана с has_many ассоциацией с Value.Таким образом, вы можете выполнить объединение следующим образом:

Characteristic.joins(values: :product).where(products: { catalog_id: @catalog.id })

Обратите внимание, что вы не должны вкладывать products в предложение where, поскольку это "обычное" условие для таблицы products.

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