Rails не заполняет ассоциацию с обратной ссылкой с find (: include) - PullRequest
1 голос
/ 22 января 2012

Работа с относительно большим набором данных У меня есть ситуация, когда мне нужно загрузить данные в связанную таблицу, а затем в процессе связанные объекты должны вызвать обратный вызов первого объекта.Однако, похоже, он не заполняет обратную ссылку на объект и поэтому даже использует: include, у него много SQL-запросов

Например:

class Movie
  belongs_to :title
end

class Title
  has_one: movie
end

Сначала я загружаю данныечерез

Movie.all(:include => [ :title ])

Это приводит к двум запросам sql.Один, чтобы загрузить все фильмы, и один, чтобы загрузить все заголовки по идентификатору.

Второе (в целях простой демонстрации) Я хочу использовать заголовок, чтобы вернуть фильм.

movies.collect{ |movie|
  cur_title = movie.title
  back_reference = cur_title.movie
}

Вот в чем проблема.Я бы предположил, что дальнейшие запросы не потребуются, поскольку обе стороны отношения один-к-одному уже загружены.Однако вторая строка в сборнике заставляет много новых запросов загружать каждый «фильм» в заголовке.Есть ли способ, чтобы rails автоматически заполняли эту обратную ссылку в заголовке, чтобы избежать многих дополнительных (избыточных) запросов, или это можно сделать вручную простым способом?

Запуск под Rails 2.3.12

1 Ответ

2 голосов
/ 22 января 2012

В Rails 3.x есть механизм под названием :inverse_of для определения обратной связи.

, а именно;

class Movie
  belongs_to :title, :inverse_of => :movie
end

class Title
  has_one :movie, :inverse_of => :title
end

, в этом случае вы не получите перезагрузку.

В Rails 2.x вы можете найти @ h-lame's parental_control полезное временное решение.

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