Domanda

I & # 8217; m utilizzando l'ultima globalizzazione2 e le rotaie 2.2. Mi chiedo se quanto segue sia un bug o una funzionalità: sembra che ci sia una query db separata per ogni elemento in un set di dati per ottenere la traduzione. Ciò non suona bene poiché può facilmente provocare centinaia di query.

Illustrazione. Controller semplice:

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

Quindi @menu_sections viene ripetuto ciclicamente in una vista, dove viene chiamato l'attributo localizzato (nome):

  <% @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 %>

Sembra che ogni menu_section.name abbia come risultato la query 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]

Cosa ne pensi? Forse c'è un modo migliore per tradurre i dati di db in rotaie?

È stato utile?

Soluzione

Puoi realizzare ciò che stai cercando di fare dicendo qualcosa del tipo:

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

Ciò caricherà con impazienza le traduzioni, quindi ci saranno solo 2 query.

Altri suggerimenti

Non so se risolvi questo problema. Ma mi sono imbattuto nello stesso problema. Ho tradotto solo una colonna di una tabella (diciamo titolo). Se ho 100 righe in una tabella e se eseguo una query come questa per una determinata locale:

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

Il risultato sarà 101 query sul database !! Non sono sicuro che ciò sia previsto o previsto dal designer di Globalize.

O mi manca qualcosa (come un parametro di configurazione opzionale sulla query).

Tuttavia ho trovato una soluzione alternativa di Saimon Moore che ha implementato l'implementazione alternativa di Globalize Model Translations. Puoi leggerlo a:

http://saimonmoore.net/2006 / 12/1 / alternative-implementazione-of-globalizzare-modello-traduzioni

Tuttavia non riesco a trovare riferimenti se questo funziona con Globalize2.

Sto per lanciare il plugin Globalize2 e lanciare la mia soluzione usando la libreria Ruby I18N.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top