我覺得這個問題應該有一個簡單的答案,但我一直無法管理。RoR查詢條件:不包含任何屬性列表
我有3個模型:用戶,課程和教科書。我的模特協會工作得很好,但如果有必要的話我會包括他們。在我的應用程序中,我想要一個視圖來顯示用戶擁有教科書的課程以及用戶不擁有教科書的所有其他課程。在僞代碼,它應該看起來像
@courses_with_books = current_user.textbooks
@courses_without_books = current_user.courses.where(:id != @courses_with_books.course_ids)
我可以使用複雜的迴路完成該退居二線,但過程似乎傻了,所以我一直在研究一個方法來收集我需要一個單一的查詢,還沒有信息一無所獲。在此先感謝:d
所以利用這兩個你的建議,我做了以下內容: array = curent_user.textbooks.collect(&:course_id) courses_without_books = current_user.courses.where('id not in?',array) 這個運行沒有錯誤,但是當我在視圖中顯示<%= courses_without_books%>時, #就是所有的問題。我需要通過做一些類似於<%= @ courses_without_books.title%>的顯示課程標題,但是這會導致錯誤: SQLite3 :: SQLException:模棱兩可的列名:id –
mattwd7
我對此不太確定,但有時候,當處理不止一個表時,可能會出現模糊性問題,因爲不清楚是哪個「id」引用,因爲這兩個表都有一個名爲'id'的屬性。因此,在查詢中顯式添加表名是一個不錯的主意。所以你的新語句可能看起來像這樣:'current_user.courses.where(「courses.id NOT IN?」,@ courses_with_books.course_ids)''。也看看varatis的答案。 – rathrio
錯誤發生的原因可能是因爲延遲加載(google瞭解更多詳細信息)。 ActiveRecord實際上並沒有在關係上執行查詢,除非你用它「做」某些事情,比如迭代它並在視圖中顯示它。儘管如此,這對所有類型的查詢都是不正確的。 – rathrio