Ruby On Rails Helpers - Использование переменных экземпляра в помощниках - PullRequest
10 голосов
/ 11 марта 2011

У меня есть помощник для контроллера:

module CourseStepsHelper
  def current_quiz_result
    @course_step.step.step_quiz.quiz_attempts.where(:patient_id => current_user.id, :step_quiz_id => @course_step.step.step_quiz.id).first
  end
end

У него есть доступ к @course_step, который определен в шоу "action" на контроллере CourseSteps. Это обычная практика - использовать переменные экземпляра в помощниках?

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Я не видел хорошего аргумента, представленного в обоих случаях, и наткнулся на этот вопрос, когда искал ответ. Лично я использовал переменные экземпляра в вспомогательных методах, где это возможно, так как это самый сухой подход как для помощника, так и для представления. Вместо того, чтобы передавать переменную экземпляра из моего представления и определять мой вспомогательный метод для его принятия, я могу просто использовать его непосредственно в помощнике. Во всяком случае, немного меньше печатать ...

1 голос
/ 11 марта 2011

В зависимости от уровня детализации для этого результата теста вы можете использовать частичное.В этом случае синтаксис будет:

<%= render :partial => 'quiz/results', :locals => { :quiz => @quiz } %>

Если это относительно просто, и вы думаете, что это должно быть в помощнике, вы должны просто сделать quiz параметром.Требование представлений предоставить конкретную переменную экземпляра для использования вашего помощника, вероятно, будет осуждено другими разработчиками.

def quiz_result(quiz)    # no need to call it "current" when we supply quiz
    # do some stuff
end

Мне также кажется, что вы можете каким-то образом реструктурировать свои модели.Как видите, я реализовал мои примеры с помощью класса Quiz.Я не уверен, как выглядит ваша модель данных, но когда вы вызываете свойства, которые вложены так глубоко, это, как правило, признак того, что что-то не так.

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