3

假设书籍模型HABTM类别,例如书籍 A 有类别"CA"&如果我仅使用&"CB".
查询,我如何检索书籍 A。我知道但它使用操作。我需要类似手术的东西。"CA""CB".where("category_id in (1,2)")ORAND

已编辑

并且CA只能从类别中获取书籍。以及如何包含查询条件,例如.where("book.p_year = 2012")

4

1 回答 1

3
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;
于 2012-11-17T18:02:16.567 回答