Pergunta

Eu estou usando mais recente globalize2 e Rails 2.2. Pergunto-me se o seguinte é bug ou recurso: parece haver uma consulta db separado para cada item em um conjunto de dados para obter a tradução. Isso não parece certo, uma vez que pode facilmente resultar em centenas de consultas.

Ilustração. controlador simples:

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

@menu_sections é então enrolada através de uma visão, onde localizada atributo (nome) é chamado:

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

Looks como cada menu_section.name resultado em 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]

O que você acha? Talvez haja uma maneira melhor para traduzir os dados db em trilhos?

Foi útil?

Solução

Você pode realizar o que você está tentando fazer, dizendo algo como:

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

que carregará ansiosos as traduções, por isso, não será apenas 2 consultas.

Outras dicas

Eu don'k saber se você reslove esta questão. Mas estou correu para o mesmo problema. I uma tradução apenas uma coluna de uma tabela (título digamos). Se eu tiver 100 linhas em uma tabela e se eu fizer uma consulta como esta para um determinado local:

linhas = Category.find (: tudo, .....)

Ele irá resultar em 101 consultas no banco de dados !! Eu não tenho certeza se este é o esperado ou pretendido pelo designer de Globalize.

ou estou faltando alguma coisa (como um parâmetro de configuração opcional na consulta).

No entanto ENTENDI encontrar uma solução alternativa por Saimon Moore, que implementou implementação alternativa de globalizar modelo Translations. Você pode ler sobre ele em:

http://saimonmoore.net/2006 / 12/1 / alternativa de implementação-de-globalize-model-traduções

No entanto não consigo encontrar quaisquer referências se isso funciona com Globalize2.

Eu estou em um ponto de jogar fora Globalize2 plugin e fazer a minha própria solução usando Ruby biblioteca I18N.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top