我觉得这个问题应该有一个简单的答案,但我一直无法管理。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