查询/范围不包括关联的未保存记录

时间:2014-05-25 21:42:59

标签: ruby-on-rails ruby-on-rails-4 associations

场景:我有一个测验类型设置,其中Questions有许多Answers,并且用户提供了Response(已省略)。 response具有selected属性以指示用户的选择,correct?方法可将selectedcorrect_answer进行比较。

代码:位于this GitHub repo,以及种子数据。快速链接:

问题:我想返回正确问题的所有回复,但不包括未保存的记录。

我尝试了几种不同的方法,因为您将在代码中看到包括范围question.correct_responsesinverse_of(我已经读过的)现在是自动的) - 但无济于事。

基本上,我希望以下代码返回1,而不是0。

q=Question.first
r=q.responses.build
r.selected = q.correct_answer
q.responses.correct.size # => 0??!  wtf man!?

非常感谢您的协助。

1 个答案:

答案 0 :(得分:0)

使用scope表示您要访问数据库。由于您没有保存响应,因此您不想转到数据库。相反,你应该使用类似下面的行,它将选择所有问题的“正确”响应,然后计算它们。

q.responses.select { |r| r.correct? }.size

编辑select的简短语法:

q.responses.select(&:correct?).size