2009-03-02 10 views
0

Je suis en train d'utiliser la dernière version de globalize2 et rails 2.2. Je me demande si ce qui suit est un bug ou une fonctionnalité: il semble y avoir une requête db séparée pour chaque élément dans un ensemble de données pour obtenir la traduction. Cela ne semble pas correct car il peut facilement entraîner des centaines de requêtes.Traduction du modèle avec Globalize2 (rails)

Illustration. Contrôleur simple:

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

Alors @menu_sections est mis en boucle à travers 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 %> 

Ressemble tous les résultats menu_section.name en recherche db:

 
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 pensez-vous? Peut-être existe-t-il un meilleur moyen de traduire les données db dans les rails?

Répondre

2

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 

qui charge les traductions avides, donc, il n'y aura 2 requêtes.

0

Je ne sais pas si vous avez résolu ce problème. Mais je suis tombé sur le même problème. Je traduis juste une colonne d'une table (dites titre). Si j'ai 100 lignes dans une table et si je fais une requête comme celui-ci pour un endroit donné:

rangs = Category.find (: tous, .....)

Il se traduira par 101 requêtes sur la base de données !! Je ne suis pas sûr si cela est prévu ou prévu par le concepteur de Globalize.

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

Cependant, j'ai trouvé une solution alternative par Saimon Moore qui a implémenté l'implémentation alternative de Globalize Model Translations. Vous pouvez lire à ce sujet à:

http://saimonmoore.net/2006/12/1/alternative-implementation-of-globalize-model-translations

Cependant je ne peux pas trouver des références si cela fonctionne avec Globalize2.

Je suis sur le point de jeter le plugin Globalize2 et de lancer ma propre solution en utilisant la bibliothèque Ruby I18N.

Questions connexes