Как управлять моделью опроса с 3 вариантами выбора - PullRequest
0 голосов
/ 06 ноября 2018

В моем приложении для опроса один из методов в модели должен посчитать и сгруппировать все ответы, заданные на вопросы опроса. Возвращаемый хеш должен иметь следующий формат - {"survey_name": {"yes": 3, "no": 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 голосов
/ 07 ноября 2018

Думаю, вам понравится:

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 после не перестает работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...