Frage

Ich bin mit neuester globalize2 und Schienen 2.2. Ich frage mich, ob die folgenden Fehler oder Feature ist: Es scheint in einem Datensatz eine separate DB-Abfrage für jedes Element, um die Übersetzung zu erhalten. Das klingt nicht richtig, da es leicht in Hunderten von Anfragen führen kann.

Illustration. Einfache Steuerung:

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

Dann wird @menu_sections in einer Ansicht geschleift Thru, wo Attribut (name) lokalisiert ist, genannt:

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

Sieht aus wie alle menu_section.name Ergebnisse in db-Abfrage:

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]

Was denken Sie? Vielleicht gibt es einen besseren Weg, db Daten in Schienen für die Übersetzung?

War es hilfreich?

Lösung

können Sie erreichen, was Sie versuchen, mit den Worten, etwas zu tun wie:

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

Das wird die Übersetzungen eifrig Last, so gibt es nur zwei Abfragen sein wird.

Andere Tipps

ich don'k wissen, ob Sie dieses Problem reslove. Aber ich bin in das gleiche Problem lief. Ich ein übersetzen nur eine Spalte einer Tabelle (sagen Titel). Wenn ich 100 Zeilen in einer Tabelle, und wenn ich eine Abfrage wie diese für ein bestimmtes Gebietsschema:

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

Es ist in 101 Abfragen in der Datenbank führen !! Ich bin nicht sicher, ob dies erwartet wird, oder von dem Designer des Globalize bestimmt.

oder ich bin etwas fehle (wie ein optionalen Konfigurationsparameter auf der Abfrage).

Allerdings habe ich eine alternative Lösung von Saimon Mooren finden, die alternative Implementierung von Globalize Modell Übersetzungen implementiert hat. Sie können darüber lesen Sie unter:

http://saimonmoore.net/2006 / 12/1 / Alternative-Implementierung-of-globalisieren-model-Übersetzungen

Allerdings kann ich keine Hinweise finden, wenn diese mit Globalize2 funktioniert.

Ich bin an einem Punkt werfen Globalize2 Plugin und rollt meine eigene Lösung Ruby-L18N-Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top