Следующий код работает, но для меня очень много предложений SQL;Удаление избыточных запросов с использованием активной записи
User.includes([:profile,:roles]).select("id, email, created_at, confirmed_at, countries.name").find_in_batches do |users|
users.map{|u| # In here I access profile.country.name}
end
Что подразумевается сделать, это взять информацию пользователя вместе с некоторой информацией о профиле и поместить его в формат CSV.
Внутри .map
Я звоню profile.country.name
Это идет отлично, но Rails запускает дополнительный вызов SQL, чтобы найти имя, что я хочу сделать, - это захватить эту информацию в моем первоначальном поиске.
Моя проблема заключается в том, что из-за country
связанно с profile
и не user
я не могу добавить его в моем .includes
, потому что не видит его как вулканизующаяся таблицу. Есть ли что-нибудь, что я могу сделать, чтобы заставить включить присоединиться к таблице, связанной с profile
?
Информация о соответствующей модели приведена ниже;
Пользователь:
has_one :profile, dependent: :destroy
Профиль:
belongs_to :user
belongs_to :country
Страна:
has_many :profiles
Cheers Barry, мне пришлось сыграть еще немного с [], чтобы заставить его работать: 'includes (: profile => [: country],: role => [])' – Toby
Ах да, конечно, я забыл, что он должен стать хешем, а не массивом, чтобы разрешить key => value notation. – brrygrdn