Я использую последние globalize2 и rails 2.2. Интересно, является ли следующее ошибкой или возможностью: кажется, что для каждого элемента в наборе данных существует отдельный запрос БД для получения перевода. Это звучит неправильно, так как может легко привести к сотням запросов.
Иллюстрация. Простой контроллер:
def index
@menu_sections = MenuSection.find(:all)
end
Затем @menu_sections просматривается в представлении, где вызывается локализованный атрибут (имя):
<% @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 %>
Похоже, что каждое menu_section.name приводит к запросу в БД:
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]
Что ты думаешь? Возможно, есть лучший способ для перевода данных из БД в рельсы?