Предполагая, что вы хотите вернуть категории, вам нужно ВРУЧИТЬ ОБЪЯВЛЕНИЕ category_relationships и поместить условие ИЛИ в комбинированную таблицу.
Category.includes(:category_relationships).where("categories.id IN (?) OR category_relationships.category_id IN (?)",category_ids,category_ids)
Этот запрос создает внешнее соединение таблицы путем объединения столбцов categories
и category_relationships
. В отличие от внутреннего соединения (например, Category.joins(:category_relationships)
), таблица внешнего соединения также должна иметь categories
без ассоциированных category_relationship
. Затем он применил бы условия в предложении where
на внешней таблице соединений, чтобы вернуть соответствующие записи.
includes
заявление без условий в ассоциации обычно делает два отдельных запроса sql для извлечения записей и их связи. Однако при использовании с условиями в связанной таблице он должен сделать один запрос для создания внешней таблицы соединений и запуска условий на внешней таблице соединений. Это позволяет вам извлекать записи без ассоциации.
См. this для подробного объяснения.
Это также неправильное использование символа 'hash',': ' – lurker
, какую таблицу вы пытаетесь извлечь, категорию или что-то еще, связанное с ней? – tihom
Возможный дубликат [запроса ActiveRecord OR] (http://stackoverflow.com/questions/3639656/activerecord-or-query) – user