在我的调查应用程序中,模型中的一种方法应该计算并归纳所有针对调查问题的答案。返回的哈希应采用以下格式-{“ survey_name”:{“ yes”:3,“ no”:2,2,“ dont_know”:1}}
现在我有了有效的解决方案,但是它看起来并不十分坚固。
def report
statement = {
'yes' => 0,
'no' => 0,
'dont_know' => 0
}
@survey.questions.each do |question|
if question.answer&.value == 'yes'
statement['yes'] += 1
elsif question.answer&.value == 'no'
statement['no'] += 1
else
statement['dont_know'] += 1
end
end
{
@survey.name => statement
}
end
请问如何以更优雅的方式完成它?
答案 0 :(得分:2)
我想您会喜欢:
statement = Hash.new(0)
@survey.questions.each do |question|
answer = question.answer&.value
statement[answer] += 1 if answer
end
用Hash.new(0)
初始化使得尚未定义评估statement[answer]
时,它将答案键添加到值为0的哈希中,因此之后的+1
不会失败。