Хотите вернуть глобальную переменную вместо локальной

#ruby-on-rails-3

#ruby-on-rails-3

Вопрос:

Я проверяю существование «test_results» в контроллере приложения. Она возвращается как локальная переменная. Я хотел бы вызвать ее один раз и сделать доступной для всего сеанса. Как мне это сделать?

«test_results» в контроллере приложения:

   def test_results
    (0 .. 4).each do |x| # looks for answers to the first 4 questions
      if @answers[x].nil? || @answers[x] == 0.0
        return false
        break
      end
    end
    return true
  end
  

другие контроллеры:

 before_filter :test_results

if test_results
   ...do stuff
else
   ...display "take the test"
end
  

сообщение об ошибке от view:

 undefined local variable or method `test_results'
  

Ответ №1:

Вы можете попробовать использовать @

  if @instrument_results
  

Редактировать

Результат before filter не сохраняется. Я не знаю, что вы хотите сделать, но вы можете установить переменную уровня контроллера внутри функции test_results, а затем ссылаться на нее как @controller.variable_name. Но если вы намерены создать условное представление на основе возвращаемого значения test_results, я предлагаю вам перенаправить на другое действие в методе test_results и поместить содержимое успеха в текущий контроллер. Вы можете использовать модификаторы :only и :except, чтобы проверить, какое действие контроллера вызовет :before_filter . Надеюсь, это поможет.