Убедитесь, что ActiveRecord :: Relation уже включает JOIN - PullRequest
2 голосов
/ 29 мая 2020
• 1000 фильтрация Я получаю сообщение об ошибке:

PostgreSQL: PG::DuplicateAlias: ERROR: table name "users" specified more than once

До возникновения ошибки JOIN уже находится в запросе -

$ pry> relation.to_sql
SELECT \"posts\".* FROM \"posts\"
INNER JOIN users ON users.id = posts.user_id
WHERE \"posts\".\"created_at\" BETWEEN '2019-05-01 00:00:00'
AND '2020-05-01 23:59:59' AND \"users\".\"type\" = 'Guest'"

Я хочу исправить это, проверив, является ли таблица уже присоединился к моему объекту ActiveRecord :: Relation. Я добавил:

def join_users
  return relation if /JOIN users/.match? relation.to_sql

  relation.joins('LEFT JOIN users ON users.id = posts.user_id')
end

Это решение работает, но мне интересно - есть ли лучший способ проверить, находится ли JOIN внутри отношения?

1 Ответ

1 голос
/ 29 мая 2020

Возможно, вы можете использовать joins_values, который не задокументирован, но является методом ActiveRecord_Relation publi c, который возвращает массив, содержащий имя таблицы, с которой построен текущий запрос (объект):

Post.joins(:user).joins_values # [:user]
Post.all.joins_values          # []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...