Избегайте загрузки связанных объектов отношений - PullRequest
3 голосов
/ 19 июня 2011

Я использую Ruby on Rails 3.0.7 и, по соображениям производительности, я хотел бы избежать загрузки связанных объектов при получении объекта класса. То есть, если у меня есть Article класс \ модель с оператором has_many :users, я бы не хотел загружать связанные User объекты при извлечении объекта Article (я думаю, это поведение зависит от Ruby on Rails " «Соглашение о конфигурации» принцип).

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 19 июня 2011

Как отмечает еще один Geek, Rails (ActiveRecord) не загружает объекты отношений по умолчанию.Скорее, он идет и получает их, когда вы просите их.Если вам не нужны объекты этих отношений, он никогда не будет загружать их, экономя время базы данных.

Если вам нужно, то он будет извлекать их лениво (по умолчанию).Если вы знаете, что вам понадобятся все (или многие) объекты отношений (при условии x-ко-многим), то вы можете использовать модификатор :include для вашего find, чтобы получить их все сразу (что будетбыть намного быстрее, так как он может сделать это с помощью одного вызова БД).Знание и возможность воспользоваться способностью загружать объекты отношений - важная вещь.

@person = Person.find(params[:id], :include => :friends)

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

2 голосов
/ 19 июня 2011

Подразумевается в этой вики статье, загрузка по умолчанию отложена. Вы должны включить отношения: users, если хотите, чтобы они загружались с нетерпением.

...