2017-10-02 3 views
0

J'utilise la grey ruby ​​Globalize à des fins de traduction dans une application Ruby on Rails. J'ai un modèle, Region, sur lequel je traduis la colonne name. Lorsque vous utilisez ActiveRecord pour interroger la table des régions, telles que:Requêtes SQL brutes lors de l'utilisation de la gemme Globalize avec Ruby on Rails

Region.where(name: 'translated')

L'enregistrement de la région avec le nom traduit translated est correctement retourné. Cependant, quand je fais une recherche avec:

Region.where('name like ?', 'translated')

Il retourne un ActiveRecord_Relation vide. Il semble que l'interrogation avec des chaînes SQL accède directement aux enregistrements de base de données sans utiliser la gemme Globalize.

Comment puis-je effectuer des requêtes like pour récupérer des enregistrements traduits?

(je travaille avec Globalize 5.0.0 et Rails 4.2.8)

Répondre

0

La solution que je suis arrivé à travailler pour moi était:

Region.with_translations(I18n.locale).where('region_translations.name like ?', "translated")

Cette rejoint la table region_translations sur region_translations.region_id = regions.id, où I18n.locale = region_translations.locale

0

Vous pouvez le faire comme ceci:

Region.includes(:translations).where('name like ?', 'translated') 

De cette façon, vous aurez accès à la table de traduction de Globalize gemme.