ленивая нагрузка модельных атрибутов - PullRequest
1 голос
/ 25 января 2010

Обычно рельсы загружают данные с помощью: select => "*" из базы данных. Я знаю, что могу изменить это. Но я бы хотел пойти другим путем: всегда выбирайте «id» и загружайте атрибуты автоматически позже, когда они необходимы.

Пример: Доступ к user.description должен, если он был загружен. если нет, вызовите «ВЫБЕРИТЕ описание ОТ ГДЕ ГДЕ id = # {self.id}» и установите его.

Кто-нибудь знает, есть ли плагин rails, который делает это? Или как это реализовать?

Спасибо, Корин

Ответы [ 3 ]

1 голос
/ 13 января 2013

Я написал плагины Rails, которые делают именно это lazy_columns . Обратите внимание, что гораздо лучший подход - создать новую модель с большими столбцами, которые вы хотите загружать по требованию (поскольку Rails по умолчанию загружает связанные объекты).

0 голосов
/ 25 января 2010

Целесообразно просто реорганизовать ваши основные поля «огромных пятен» в отдельную модель (например, BookBody), которая обычно не требуется при работе с моделями оптом. Кроме того, вы можете использовать опцию :select для поиска

 BookWithHugeBlobOfText.find(:first, :select=>"only,small,columns")

Записи, выбранные таким образом, будут доступны только для чтения, так как философия Rails говорит (и это справедливо!), Что вам нужно иметь все данные для модели для ее проверки. Было бы неплохо иметь ленивую загрузку, но в ее нынешнем виде я бы не рекомендовал вам использовать для этого плагины monkeypatch.

Другой вариант - создать представление SQL, которое будет содержать только легкие поля, и запускать ваши операции оттуда.

0 голосов
/ 25 января 2010

Быстрый поиск в Google обнаружил это , но я с glongman. Я не могу представить, какая проблема с производительностью потребует этого ...

...