2016-11-29 1 views
0

나는 사용자 모델을 가지고이레일 액티브 쿼리 모호한 열 이름 오류

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 예제에서 특정 사용자 아이디가 필요합니다. 사용자 ID = 3을 제외하고 테이블 lists_users에 대해 lu.list_id를 제외하고이 테이블에는 별칭 lu가 있습니다 –

+0

예제 에서처럼 생성 된 쿼리를 활성화하는 방법 –

답변

2

레일 5를 사용하는 경우 left_outer_joins을 쿼리에 사용할 수 있으며 not을 사용하여 조건이 부정한 경우 테이블 이름에 조건을 넣을 수 있으므로 조건을 무효화 할 수 있으므로 완료하면됩니다.

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

결과에이 쿼리에는 하나의 ID를 가진 많은 사용자가 있어야하며, ditinct ot group by을 사용해야합니다. 어떻게해야합니까? –

+0

@ shuba.ivan은'.distinct'를 쿼리에 포함합니다. – Aguardientico

+0

당신은 어떤 ide를 사용합니까? 루비 광산에서 crtl + space가 가능한 함수를 보지 못했을 때, 쿼리 함수를 보지 못했을 때, 어쩌면 플러그인이 필요 하겠지만, 플러그인을 찾을 수 없다. –