Ruby on rails 活动记录基于子数据获取父记录
我有几个相关的模型:Ruby on rails 活动记录基于子数据获取父记录,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有几个相关的模型:类别有很多问题问题有许多答案。我需要: 获取所有类别,其中至少有一个问题有答案 统计至少有一个答案的所有问题(类别中有多少个问题有答案) 获取所有类别,其中所有问题都有0个答案 计算所有没有答案的问题(类别中有多少问题没有答案) 编辑 如果我想得到有答案的类别列表和没有答案的类别列表 cats = [] @categories_with_answers = Category.all.each do |cat| cats << cat if cat.questi
类别
有很多问题<代码>问题
有许多
答案
。我需要:
问题
有答案
cats = []
@categories_with_answers = Category.all.each do |cat|
cats << cat if cat.questions.joins(:answers).count > 0
end
cats=[]
@类别带答案=类别.全部.每个do | cat|
猫0
结束
如何以更简洁的方式编写此代码段?您可以使用
包含和连接来查询关系:
Category.join(问题:答案)
问题。加入(:答案)。计数
Category.includes(问题::答案)。其中(问题:{answers:{question\u id:nil})
问题。包括(:答案)。其中(答案:{Question\u id:nil})
这里有一篇很好的博客文章详细讨论了这些方法:
编辑
对于单个类别,查询类似于:
@category = Category.find(params[:category_id])
@category.questions.joins(:answers).count
这相当于:
Question.joins(:answers).where(questions: { category_id: @category.id }).count
同样的原则也适用于包括
@category.questions.includes(:answers).where(answers: { question_id: nil })
谢谢你的帮助,我怎样才能得到每个类别2和4的结果?我需要为我的每个类别计算至少一个答案的问题。而且,我还需要计算我的每一类中所有没有答案的问题。