我有一个名为Ad的模型,如下所示:
class Ad
include Mongoid::Document
referenced_in :category
end
和类别模型:
class Category
include Mongoid::Document
referenced_in :domain
references_many :ads
end
如何按域选择广告?
我曾尝试使用Ad.where('category.domain_id' => domain.id)
,但这不起作用。
答案 0 :(得分:6)
问题在于MongoDB无法将Category
记录映射到Ad
记录。它只知道Ad
记录有一个category_id
字段,因此'category.domain_id'
将始终不返回任何内容。查询中的点表示法仅适用于嵌入式文档,而不适用于引用(它们仍然是MongoDB中的二等公民)。
因此,要解决您的问题,您需要进行2次查询:
category_ids = Category.where(:domain_id => domain.id).map(&:_id)
Ad.where(:category_id.in => category_ids)