Ruby on rails 如何通过关联表从同一列的多个条件中获取记录

Ruby on rails 如何通过关联表从同一列的多个条件中获取记录,ruby-on-rails,activerecord,model,activemodel,Ruby On Rails,Activerecord,Model,Activemodel,假设一本书的模型是HABTM的类别,例如一本书的类别是CA和CB,如果我只使用CA和CB进行查询,我如何检索a本书呢。我知道.where(“category_id in(1,2)”)但它使用或操作。我需要像和这样的操作 已编辑 还可以仅从类别CA获取书籍。以及如何包括查询条件,如。where(“book.p_year=2012”) 否则,您需要在SQL中直接滥用联接表,按book_id对结果进行分组,对它们进行计数,并且只返回计数至少等于类别数的行。。。类似这样的内容(但我肯定这是错误的,所以如

假设一本书的模型是HABTM的类别,例如一本书的类别是CA和CB,如果我只使用CA和CB进行查询,我如何检索a本书呢。我知道
.where(“category_id in(1,2)”)
但它使用
操作。我需要像
这样的操作

已编辑

还可以仅从类别
CA
获取书籍。以及如何包括查询条件,如
。where(“book.p_year=2012”)

否则,您需要在SQL中直接滥用联接表,按book_id对结果进行分组,对它们进行计数,并且只返回计数至少等于类别数的行。。。类似这样的内容(但我肯定这是错误的,所以如果你走这条路线,请仔细检查语法。也不确定它是否会比上面的更快):


可能是
。其中(“category\u id=?和category\u id=?”,1,2)
Kien,我想这是行不通的,因为这就像是用该条件对每一行执行查询一样。例如:category_id是1,但u查询1和2。毫无疑问,没有比这更好的了。我已经测试过了。这是正确的,但我忘了另外两个标准,只是更新了我的问题。
ca = Category.find_by_name('CA')
cb = Category.find_by_name('CB')
Book.where(:id => (ca.book_ids & cb.book_ids))  # & returns elements common to both arrays.
SELECT book_id, count(*) as c from books_categories where category_id IN (1,2) group by book_id having count(*) >= 2;