Я использую гем
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)
Не получается, все равно делает запрос