Rails: дополнительные ненужные запросы при включении таблицы M2M - PullRequest
0 голосов
/ 26 декабря 2010

Скажем, у меня есть таблица Учителей с отношением: has_and_belongs_to_many со столом Студентов.У меня есть таблица student_teachers, отображающая поля [teacher_id, student_id].

Когда я выполняю поиск и хочу вывести всех учителей вместе со всеми своими учениками, я делаю:

Teacher.find(:all, :include => :students)

хотя я включил таблицу студентов, я все равно получаю один запрос, который выводит учителей, а затем еще n запросов для таблицы Students_teachers, а n - количество учителей, которые вернулись из первого запроса.

Почему Rails уже не включается в таблицу student_teachers и вместо этого отправляет так много запросов?

1 Ответ

0 голосов
/ 26 декабря 2010

Это ожидаемое поведение активной загрузки Rails, чтобы предотвратить проблему N + 1 (т. Е. Необходимость выполнить запрос, чтобы найти всех учителей, а затем еще один запрос для учителя, чтобы найти всех своих учеников.) См. http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations.

Если вы хотите сделать это в меньшем количестве запросов, вам нужно будет использовать :joins

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