[英]Active record query: how to group for an association
我正在尝试找到一种获取某些记录的聪明方法。
我有这些课:
class Question < ActiveRecord::Base
belongs_to :section
has_many :answers
has_many :quiz_questions
has_many :quizzes, through: :quiz_questions
has_many :question_stats
end
class User < ActiveRecord::Base
has_many :quizzes, dependent: :destroy
has_one :user_profile
has_many :questions, through: :quizzes
has_many :question_stats
end
class Section < ActiveRecord::Base
has_many :questions
has_many :quizzes
end
class QuestionStat < ActiveRecord::Base
belongs_to :user
belongs_to :question
end
如果我查询
current_user.question_stats
我收到我的物品
=> [#<QuestionStat id: 1, user_id: 2, question_id: 2, errors_count: 0, done_count: 0, done: false>,
#<QuestionStat id: 6, user_id: 2, question_id: 39, errors_count: 0, done_count: 0, done: false>,
#<QuestionStat id: 7, user_id: 2, question_id: 102, errors_count: 0, done_count: 0, done: false>,
#<QuestionStat id: 8, user_id: 2, question_id: 96, errors_count: 0, done_count: 0, done: false>,
#<QuestionStat id: 9, user_id: 2, question_id: 46, errors_count: 0, done_count: 0, done: false>,
#<QuestionStat id: 10, user_id: 2, question_id: 119, errors_count: 0, done_count: 0, done: false>,
我需要对部分的统计信息进行分组,因此我知道每个部分的用户回答了多少个问题以及他犯了多少错误。
Question_id所属的问题所属的部分。
我也尝试从current_user.questions开始以另一种方式进行
如果我查询
current_user.questions
我获得了用户回答的所有问题。
<Question id: 94, quiz_type: "base", image: nil, text: "Com'è chiamato l'insieme degli organi con i quali ...", section_id: 1>,
#<Question id: 68, quiz_type: "base", image: nil, text: "Come viene denominata la parte di calpestio più ba...", section_id: 1>,
#<Question id: 111, quiz_type: "base", image: nil, text: "Un'elica destrorsa:", section_id: 1>,
#<Question id: 103, quiz_type: "base", image: nil, text: "Si ha cavitazione quando:", section_id: 1>
当然
current_user.questions.first.questions_stats.first
向我返回有关单个用户的特定问题的统计信息。
我建议在问题统计信息中加入section_id
,这样您就可以
QuestionStat.where(section: 1, user_id: current_user.id)
据我所知,以当前的关联/表格/列的方式,按部门获取问题统计信息的查询将非常混乱且效率低下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.