@vadimstroganov

Globalize gem + SQL, как вытащить значение поля, не вызывая методов гема?

Я использую гем Globalize для мультязычности.

Встречаются много тяжелых запросов, которые в конечном счете пишутся на чистом SQL.

Модель:
class Page < ActiveRecord::Base
  translates :h1, :title, :content
end


Имеются две таблицы:
1) pages - тут хранится все, кроме переводов
2) page_translations - тут хранятся переводы страниц (h1, title, content)

Если я сделаю так:
page = Page.first # запрос на получение страницы
page.title # тут произойдет еще один запрос в таблицу page_translates для получения переводов для текущей локали

то будет два запроса, все логично, ведь мы не получали дополнительно title, h1 или content

Но если я хочу написать к примеру такой SQL:
SELECT * FROM pages p JOIN page_translations pt ON pt.page_id = p.id LIMIT 1


В данном случае подтягиваются все данные, и основная инфа о страницы и ее переводы, но если мы теперь сделаем так:
sql_page.title

То все равно идет запрос в таблицу page_translations на получение перевода (несмотря на то, что нужные поля мы уже получили)

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

Пробовал так:
sql_page.read_attribute(:title)
Не получается, все равно делает запрос
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Renius
дурак восторженный
page.with_translations(I18n.locale)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы