我有一个问答模型,答案属于问题,一个问题有很多答案。答案有一个布尔:correct
列,因此可以将答案标记为正确。
下面的代码检查一个问题是否有任何正确的答案,然后相应地显示一个不同的 div。该代码有效,但是它对我想避免的数据库执行费力的计数查询。
有没有办法重写这个查询,或者最好在问题表中有一个列,当答案被标记为正确时切换为真?
<div class="<%= question.answers.count(conditions: ['correct = ?', true]) == 1 ? 'correct-answer' : 'no-correct-answer' %>">
<%= question.answers_count %>
</div>
编辑
感谢下面发布答案的人,但是即使在 answers 表上有一个 questions_id 索引,两个查询都使用我想避免的计数查询,因为可能有很多答案需要循环。
我的解决方案是在问题表上创建一个 :correct 布尔列,当答案被标记/切换为正确时,它也会切换该列,因此在呈现视图时我不必执行任何动态 SQL 查询。
答案.rb
def toggle_correct(attribute)
toggle(attribute).update_attributes({attribute => self[attribute]})
end
def toggle_question_correct
self.question.toggle_correct(:correct)
end