如何使用3个选项来管理调查模型

时间:2018-11-06 20:48:19

标签: ruby-on-rails ruby

在我的调查应用程序中,模型中的一种方法应该计算并归纳所有针对调查问题的答案。返回的哈希应采用以下格式-{“ 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

请问如何以更优雅的方式完成它?

1 个答案:

答案 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不会失败。