Mobility gem + Rails: как выполнить соединение с запросом LIKE для переведенной модели - PullRequest
0 голосов
/ 02 июля 2018

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

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

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

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

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

-> Outputs [], поскольку он не включается в переведенную таблицу: 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 Ответ

0 голосов
/ 03 июля 2018

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

Product.joins(:category).merge(Category.i18n {name.matches_any(categories)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...