2014-11-25 3 views
0

У меня возникла проблема с решением запроса с использованием ActiveRecord. Описание запроса: «Возврат маршруты, связанные с поездками, что агент создал»Проблемы с запросом соединения ActiveRecord

Это то, что я пробовал:

trips = Trip.where("agent_id = ? AND is_itinerary", params[:id]) 
     .joins('LEFT JOIN itineraries ON trips.id = itineraries.trip_id LEFT JOIN users ON itineraries.user_id = users.id') 
     .select('trips.*, itineraries.status, users.*') 

Результаты, кажется, хорошо, но проблема в том, возвращающийся идентификатор записей. Они дублируются, и вместо того, чтобы быть Trip.id, похоже, что возвращаемым идентификатором является User.id.

У кого-нибудь есть идеи, как его решить? Возможно, измените стратегию группировки по умолчанию?

Таблицы: маршруты (идентификатор, trip_id, user_id), экскурсии (ID, ...), User (идентификатор, ...)

+0

Я думаю, что 'users. *' Переопределяет столбец 'id' от того, который приходит в' отключения. * ', Есть причина, по которой вы загружаете весь контент сразу в одном запросе вместо двух отдельных запросов с нетерпеливой загрузкой? – Surya

+0

Ммм, не какая-то особая причина. Предлагаете ли вы разделить запрос на две части? Первый должен иметь, чтобы пользователи маршрутизации присоединились к части, не так ли? – halbano

ответ

0

Наконец-то я мог бы решить проблему разделения исходного запроса:

trips = Trip.where("agent_id = ? AND is_itinerary", params[:id]).joins('LEFT JOIN itineraries ON trips.id = itineraries.trip_id').select('trips.*, itineraries.status') 
      trips = trips.joins("LEFT JOIN users ON itineraries.user_id = users.id").select("users.*") 

Выполнение этого способом Пользователи. * Атрибуты не переопределяют атрибуты Trips.

Смежные вопросы