Mobility gem + Rails:如何在翻译后的模型上执行LIKE查询联接

时间:2018-07-02 09:19:23

标签: ruby-on-rails activerecord mobility

在我的应用上实现Mobility之前,我先执行过此查询:

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

其中类别为= params[:categories].map {|category| "%#{category}%" }

实施Mobility gem之后,查询输出显然是:[]

因此,我尝试按照gem doc中所述添加.i18n: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%'] ))

然后我尝试加入类别转换表,但没有成功。我试图通过following question激发我的查询。但是所有这些查询都失败了:

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_translationsCan't join 'Product' to association association_name '

如何通过ILIKE加入类别和查询以获取翻译后的输出?

1 个答案:

答案 0 :(得分:1)

感谢克里斯的帮助,这是对可能感兴趣的人的有效Arel查询:

Product.joins(:category).merge(Category.i18n {name.matches_any(categories)})