2016-11-29 63 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示例中的inlude特定用戶ID我排除了用戶id = 3並且排除了表lists_users的lu.list_id,該表具有別名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

結果這個查詢有多個用戶有一個id,需要使用ditinct或者group。這是怎麼回事? –

+0

@ shuba.ivan只是在查詢中包含'.distinct' – Aguardientico

+0

您使用什麼IDE?在紅寶石礦的時候把crtl + space看不到可能的功能,看不到函數進行查詢,可能需要一些插件,但是我找不到插件 –