2016-11-29 5 views
0

У меня есть модель пользователя, и мне нужно создать запрос, как этоRails ActiveRecord ошибка запроса неоднозначное имя столбца

SELECT DISTINCT u.id FROM users as u 
LEFT JOIN lists_users as lu ON lu.user_id = u.id 
WHERE u.id != 3 
AND lu.list_id != 34 

Стараюсь

scope :include_current_user, lambda { |user, list| 
joins('LEFT JOIN lists_users AS lu ON lu.user_id = id') 
.where('id != :user_id AND lu.list_id != :list_id', user_id: user.id, list_id: list.id) 

}

но у меня есть ошибка

SQLite3::SQLException: ambiguous column name: id: SELECT "users".* FROM "users" LEFT JOIN lists_users AS lu ON lu.user_id = id WHERE (id != 2 AND lu.list_id != 34)

Как создать это с помощью запроса ActiveRecord?

+0

Вам не нужно указывать 'users.id', чтобы избежать двусмысленности? –

+0

Мне нужно ввести отдельный идентификатор пользователя в этом примере sql. Я исключаю идентификатор пользователя = 3 и исключаю lu.list_id для таблиц list_users, эта таблица имеет псевдоним lu –

+0

Как активный созданный запрос записи, как в примере –

ответ

2

Если вы используете Rails 5, вы можете использовать left_outer_joins для запроса, а также можете использовать not, чтобы свести на нет условия того, где, а также для предотвращения неоднозначного столбца вы можете указать условия имени таблицы, чтобы вы закончили с запросом

left_outer_joins(:list_users).where.not(users: { id: user.id }, list_users: { list_id: list.id }) 
+0

В результате этого запроса есть много пользователей с одним идентификатором, нужно использовать ditinct ot group by. Как это сделать? –

+0

@ shuba.ivan просто включите '.distinct' в запрос – Aguardientico

+0

какой идеал вы используете? В рубиновой шахте, когда put crtl + space не видит возможной функции, не вижу функции для запроса, может быть, нужен какой-то плагин, но я не могу найти плагин –