Как заставить ActiveRecord загружать отношение own_to-has_one через JOIN вместо 2 запросов? - PullRequest
1 голос
/ 14 октября 2011

У меня есть следующие модели:

User < ActiveRecord::Base
  belongs_to :person
end

Person < ActiveRecord::Base
  has_one :user
end

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

User.includes(:person)

Проблема заключается в том, что используются 2 запроса, что вполне нормально, в отношении own_to-has_many, но в этом случае я думаю, что было бы лучше использовать JOIN и только один запрос.

Если я сделаю User.join(:person), он присоединится к :person, но без выбранного статуса и в качестве атрибутов :user.

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

1 Ответ

0 голосов
/ 15 октября 2011

Я обнаружил, что использование:

User.includes(:person)

выполняет 2 запроса ... НО, если вам нужно использовать столбец: person в запросе, ActiveRecord автоматически обнаруживает его и преобразует 2 запроса водин запрос с объединениями

User.includes(:person).where('person.name=?', 'something')

Я никогда не перестаю удивляться Rails ^^

...