我的问题有答案 - how to find entries with no tags using acts-as-taggable-on?
但遗憾的是效率很低。它会在循环期间对数据库进行一次点击
我有10,000条记录,如果我要循环遍历所有这些记录并且代码针对所有10k命中一个查询,那将是不可接受的。
寻找更有效的解决方案。
感谢。
答案 0 :(得分:3)
我建议这个解决方案(模型候选人的例子):
Candidate.all - Candidate.joins("JOIN taggings on taggings.taggable_id = candidates.id").where("taggings.taggable_type = 'Candidate'")
这个命中数据库只有两次,无论你的表中有多少个对象。
答案 1 :(得分:3)
我作为范围的解决方案是:
scope :no_tags, joins('LEFT JOIN taggings ON taggings.taggable_id = assets.id AND taggings.taggable_type = "Asset"').where('taggings.id IS NULL')