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

时间:2012-11-17 14:11:10

标签: ruby-on-rails activerecord model activemodel

让我们说一个图书模型HABTM类别,例如一本书A有类别"CA"& "CB".如果我使用"CA"&查询,我如何检索图书A.仅"CB"。我知道.where("category_id in (1,2)"),但它使用OR操作。我需要像AND这样的操作。

被修改

还可以从CA类别中获取图书。以及如何包含查询条件,例如.where("book.p_year = 2012")

1 个答案:

答案 0 :(得分: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.

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

SELECT book_id, count(*) as c from books_categories where category_id IN (1,2) group by book_id having count(*) >= 2;