Как стать автором
Обновить

Комментарии 18

Тут вряд ли будет какой-то выйгрыш по скорости, так как все join'ы всеравно будут выполняться аналогичным образом. И если у вас разные таблицы в зависимости от того что выбираем, можно не джойнить все зависимые, а только нужные, то в случае со view вы будети обращаться ко всем таблицам каждый раз.
Про выйграш в скорости — имелось ввиду отказ от использования методов joins/include activerecord. Но в основном мне хотелось показать, как облагородить такой большой запрос, добавив в него частичку магии activerecord. А насчет подключать только нужные таблицы — я брал ситуацию, когда необходимо все. Это может быть поиск по любому столбцу, экспорт в csv/xls…
Мне кажется, что тут больше магии базы данных, чем магии ActiveRecord все-таки.
Вместо ActiveRecord::Base.connection.execute в миграциях можно писать просто execute
спасибо, сейчас обновлю
А вообще во вью можно вставлять записи, правда обработку вставок придется на триггерах описать. Так будет выглядеть совсем как обычная таблица.
> После создадим модель Product, сделав ее readonly
т.е. Вы полностью отказываетесь от create/update/delete?
Или Вы дублируете модельками Item/Color/Store/etc?
В данном случае наша модель является в большей степени презентером или декоратором уровня базы данных/модели. А для наполнения информацией используются стандартные модели Item/Color/Store/etc
создание sql представлений — это перенос бизнес-логики из модели в субд. Не rails-way.
а бизнес логика в модели — это rails way? Кажется для бизнес логики есть папка lib, а модели всего лишь получают данные из хранилища(базы данных, xml, etc). Хотя возможно, я ошибаюсь))
вы явно не понимаете, зачем каталог lib нужен
А что мешало просто создать named_scope с нужными объединениями?
Scope не дает возможности получить информацию с присоединенных таблиц. Плюс размера scope обычно не более 80 символов, тут же их значительно больше.
размер scope? что это?

что значит нельзя получить информацию с присоединенных таблиц? нельзя сделать product.store_name? но можно product.store.name (лишнего запроса в БД все равно не будет)
Под размером scope понимается правило 80 символов, которым программисты часто пренебрегают, начиная писать всякие «спагетти»
ааа. Больше одной строчки уже не кошерно…
начиная с АР 3.0 скоуп можно писать и как обычный метод класса
Несколько месяцев назад была похожая проблема, решили все через pure ruby class. Ваше решение выглядит более элегантней. Сейчас бы точно его использовал, но увы очень много нужно переписывать
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации