2011-01-06 20 views
2

嘿,我希望你能幫助我,怎麼說「不」在活動記錄查詢

@courses = Course.where(:ID = current_user.courses)

我想獲得當前用戶未註冊的課程

@courses = Course.where(:id => current_user.courses)爲我提供了用戶註冊的課程。但我想要相反

關聯就好了。我可以使用current_user.courses或current_user.assignments。

回答

6

你可能需要的東西是這樣的:

@courses = Course.where("id NOT IN (?)", current_user.courses) 

你不能用純粹的數組或哈希狀況的原因是因爲你否定(「NOT IN」)查詢。據我所知,這不能使用基於字符串的語法來完成。如果你只是想找到匹配(「IN」)的項目,你可以使用散列形式:

@courses = Course.where(:id => current_user.courses) 

這是否定(「NOT IN」),這使得它棘手的部分。

更多信息請參見Active Record Query Interface Guide

+0

謝謝你mirthlab。它的工作正常!什麼是「ID不在(?)」?我還可以在其他查​​詢中使用它嗎? – daniel 2011-01-06 02:08:46

+0

我添加了一些信息和鏈接到文檔。希望有所幫助。 「不在」僅僅意味着「找到不在這個ID列表中的東西」,這基本上就是其他所有東西。鏈接導軌指南中有許多巧妙的技巧。看看:) – markquezada 2011-01-06 02:14:03

+0

哦,我現在有一個新的問題。我有5門課程。我沒有從所有的人那裏註冊來測試它。現在,因爲我使用「@courses = Course.where(」id NOT IN(?)「,current_user.courses)」它沒有在我的索引中顯示任何課程^^ – daniel 2011-01-06 02:16:00

1

如果你想避免使用原始字符串,你可以使用ARel

@courses = Course.where(Course.arel_table[:id].not_in(current_users.courses)) 

不幸的是,ARel未記錄非常好。我使用this作爲參考。