Question

J'utilise les dernières versions de globalize2 et rails 2.2. Je me demande si ce qui suit est un bogue ou une fonctionnalité: il semble exister une requête distincte de base de données pour chaque élément d'un ensemble de données afin d'obtenir la traduction. Cela ne semble pas correct, car il peut en résulter des centaines de requêtes.

Illustration. Contrôleur simple:

def index
    @menu_sections = MenuSection.find(:all)
end

Ensuite, @menu_sections est bouclé dans une vue, où l'attribut localisé (nom) est appelé:

  <% @menu_sections.each do |menu_section| %>
    <p><%= link_to menu_section.name, :controller => 'store', :action => 'list_menu_items_for_section', :section_id => menu_section.id %></p>
  <% end %>

On dirait que chaque menu_section.name donne lieu à une requête de base de données:

Processing StoreController#index (for 10.0.2.2 at 2009-03-02 16:05:53) [GET]
  Session ID: 468f54928cbdc0b19c03cfbd01d09fa9
  Parameters: {"action"=>"index", "controller"=>"store"}
  MenuSection Load (0.0ms)   SELECT * FROM `menu_sections`
Rendering template within layouts/store
Rendering store/index
Rendered application/_js_includes (0.0ms)
  MenuSection Columns (0.0ms)   SHOW FIELDS FROM `menu_sections`
  MenuSectionTranslation Load (0.0ms)   SELECT * FROM `menu_section_translations` WHERE (`menu_section_translations`.menu_section_id = 1 AND (`menu_section_translations`.`locale` IN ('en','root')))
  MenuSectionTranslation Columns (0.0ms)   SHOW FIELDS FROM `menu_section_translations`
  MenuSectionTranslation Load (0.0ms)   SELECT * FROM `menu_section_translations` WHERE (`menu_section_translations`.menu_section_id = 2 AND (`menu_section_translations`.`locale` IN ('en','root')))
  MenuSectionTranslation Load (0.0ms)   SELECT * FROM `menu_section_translations` WHERE (`menu_section_translations`.menu_section_id = 3 AND (`menu_section_translations`.`locale` IN ('en','root')))
Completed in 340ms (View: 320, DB: 0) | 200 OK [http://www.dev.babooka.com/store]

Qu'en penses-tu? Peut-être qu’il existe un meilleur moyen de traduire les données de la base de données en rails?

Était-ce utile?

La solution

Vous pouvez accomplir ce que vous essayez de faire en disant quelque chose comme:

def index
    @menu_sections = MenuSection.find(:all,:include=>:globalize_translations)
end

Cela chargera les traductions avec impatience, donc il n'y aura que 2 requêtes.

Autres conseils

Je ne sais pas si vous redécouvrez ce problème. Mais je suis confronté au même problème. Je traduis seulement une colonne d'un tableau (dites titre). Si j'ai 100 lignes dans une table et si je fais une requête comme celle-ci pour un environnement local donné:

rows = Category.find (: all, .....)

Il en résultera 101 requêtes sur la base de données !! Je ne sais pas si cela est attendu ou prévu par le concepteur de Globalize.

OU il me manque quelque chose (comme un paramètre de configuration facultatif dans la requête).

Cependant, j'ai trouvé une solution alternative proposée par Saimon Moore, qui a mis en œuvre une implémentation alternative de Globalize Model Translations. Vous pouvez lire à ce sujet sur:

http://saimonmoore.net/2006 / 12/1 / alternatives-implémentation-de-traductions-de-modèle-globaliser

Cependant, je ne trouve aucune référence si cela fonctionne avec Globalize2.

Je suis sur le point de jeter le plugin Globalize2 et de lancer ma propre solution à l'aide de la bibliothèque Ruby I18N.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top