Выберите * вместо таблицы. * Из запросов активных записей - PullRequest
1 голос
/ 13 июля 2020

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

Current code:

join_sql = "INNER JOIN(SELECT username, user_id FROM external_credentials UNION SELECT username, user_id FROM internal_credentials) ON id = user_id"

User.joins(join_sql)

Это дает следующее SQL:

SELECT  "USERS".* FROM "USERS" INNER JOIN(SELECT username, user_id FROM external_credentials UNION SELECT username, user_id FROM internal_credentials) ON id = user_id FETCH FIRST :a1 ROWS ONLY  [["LIMIT", 11]]

Проблема в том, что он выбирает "USERS".* вместо *, поэтому я не могу использовать дополнительные поля, к которым я присоединяюсь. Как мне указать ActiveRecord принять все поля соединения?

1 Ответ

1 голос
/ 13 июля 2020

Этот SELECT "USERS".* является результатом вызова joins (или некоторых других методов) в объекте ApplicationRecord. Если не указано явным образом, какие столбцы из каких таблиц выбрать, он возьмет все столбцы из таблицы, к которой принадлежит модель, к которой осуществляется доступ.

Вы можете изменить их, переопределив выбор выписка:

User.joins(join_sql).select('<whatever you need here>')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...