Что не так с вашим методом result(uq_id)
, так это то, что он будет запрашивать БД для каждого результата, что является медленным и постоянным ресурсом.То, что вы могли бы сделать, это использовать joins
или includes
методы для оптимизации доступа к БД.Итак, в вашей модели:
class UserQuestionnaire
def self.includes_questions
includes :questionnaire => {:sections => [:questions]}
end
def loaded_result question
user_questionnaire_results.to_a.find { |r| r.question_id == question.id }
end
end
Тогда в контроллере:
@user_questionnaire = UserQuestionnaire.includes_questions.find params[:id]
И вместо =question.result(@user_questionnaire.id)
используйте:
= @user_questionnaire.loaded_result question
Идея состоит в том, чтоВы загружаете из БД все разделы, вопросы и результаты вместе, а не каждый отдельный экземпляр.Таким же образом вы можете попробовать поиграть с функцией joins
и посмотреть, подходит ли она вам.
Проверьте журналы или консоль в dev env, чтобы увидеть, какие запросы выполняются.