Pregunta

I & # 8217; m usando el último globalize2 y rails 2.2. Me pregunto si lo siguiente es un error o una característica: parece haber una consulta de base de datos separada para cada elemento en un conjunto de datos para obtener la traducción. Eso no suena bien, ya que puede dar lugar fácilmente a cientos de consultas.

Ilustración. Controlador simple:

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

Luego, @menu_sections se enlaza en una vista, donde se llama al atributo localizado (nombre):

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

Parece que cada menu_section.name da como resultado una consulta 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é te parece? ¿Quizás haya una mejor manera de traducir datos db en rieles?

¿Fue útil?

Solución

Puede lograr lo que está tratando de hacer diciendo algo como:

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

Eso ansiará cargar las traducciones, por lo que solo habrá 2 consultas.

Otros consejos

No sé si resuelve este problema. Pero me encuentro con el mismo problema. Estoy traduciendo solo una columna de una tabla (por ejemplo, título). Si tengo 100 filas en una tabla y hago una consulta como esta para una configuración regional determinada:

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

¡El resultado será 101 consultas en la base de datos! No estoy seguro de si el diseñador de Globalize espera o pretende esto.

O me falta algo (como un parámetro de configuración opcional en la consulta).

Sin embargo, encontré una solución alternativa de Saimon Moore, quien implementó la implementación alternativa de Globalize Model Translations. Puede leer sobre esto en:

http://saimonmoore.net/2006 / 12/1 / alternativa-implementación-de-globalizar-modelo-traducciones

Sin embargo, no puedo encontrar ninguna referencia si esto funciona con Globalize2.

Estoy a punto de tirar el complemento Globalize2 y lanzar mi propia solución usando la biblioteca Ruby I18N.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top