Перевод модели с Globalize2 (рельсы) - PullRequest
0 голосов
/ 03 марта 2009

Я использую последние 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]

Что ты думаешь? Возможно, есть лучший способ для перевода данных из БД в рельсы?

Ответы [ 2 ]

2 голосов
/ 17 августа 2009

Вы можете выполнить то, что пытаетесь сделать, сказав что-то вроде:

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

Это будет загружать переводы, поэтому будет только 2 запроса.

0 голосов
/ 17 июля 2009

Не знаю, решите ли вы эту проблему. Но я столкнулся с той же проблемой. Я перевожу только один столбец таблицы (скажем, заголовок). Если у меня есть 100 строк в таблице, и если я делаю такой запрос для данной локали:

строки = Category.find (: все, .....)

Это приведет к 101 запросу к базе данных! Я не уверен, ожидается ли это или задумано разработчиком Globalize.

ИЛИ Я что-то упустил (например, необязательный параметр конфигурации в запросе).

Однако я нашел альтернативное решение Саймона Мура, который реализовал Альтернативную реализацию Globalize Model Translations. Вы можете прочитать об этом по адресу:

http://saimonmoore.net/2006/12/1/alternative-implementation-of-globalize-model-translations

Однако я не могу найти никаких ссылок, если это работает с Globalize2.

Я собираюсь выбросить плагин Globalize2 и развернуть свое собственное решение с использованием библиотеки Ruby I18N.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...