Mobility gem + Rails: как выполнить соединение с запросом LIKE для переведенной модели

У меня был этот запрос работает до реализации Mobility в моем приложении:

Product.joins(:category).where('categories.name ILIKE ANY ( array[?] )', categories)

где категории = params[:categories].map {|category| "%#{category}%" }

После реализации Mobility Gem вывод запроса был, очевидно, следующим: []

Таким образом я попытался добавить.i18n, как указано в gem doc: Product.i18n.joins(:category).where('categories.name ILIKE ANY ( array[?] )', categories)

-> Выводится [], так как он не включается в переведенную таблицу: SELECT "products".* FROM "products" INNER JOIN "categories" ON "categories"."id" = "products"."category_id" WHERE (categories.name ILIKE ANY ( array['%Categorie test%'] ))

Тогда я безуспешно пытался присоединиться к категории переведенной таблицы. Я попытался вдохновить мой запрос следующим вопросом. Но все эти запросы терпят неудачу:

Product.i18n.joins(:category).joins(:translations).where('categories.name ILIKE ANY ( array[?] )', categories)
Product.i18n.joins(:category).join_translations.where('categories.name ILIKE ANY ( array[?] )', categories)
Product.i18n.joins(:mobility_string_translations).where('categories.name ILIKE ANY ( array[?] )', categories)
Product.i18n.joins(:category_name_fr_string_translations).where('categories.name ILIKE ANY ( array[?] )', categories)

Возвращая либо: undefined method join_translations или же Can't join 'Product' to association association_name '

Как я могу присоединиться к категории и сделать запрос с ILIKE, чтобы получить переведенные результаты?

1 ответ

Решение

Благодаря помощи Криса, вот рабочий запрос Arel для тех, кто может быть заинтересован:

Product.joins(:category).merge(Category.i18n {name.matches_any(categories)})
Другие вопросы по тегам