2011-03-11 8 views
10

Tengo un ayudante para un controlador:Ruby On Rails Ayudantes - Uso de las variables de instancia de ayudantes

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 

Tiene acceso a @course_step que se define en el programa de "acción" controlador CourseSteps. ¿Es esta práctica común usar variables de instancia en helpers?

+0

Por favor, trate de pagar más claramente cuál es su pregunta. – polarblau

+0

@polarblau He aclarado mi pregunta –

+0

Para obtener una respuesta real, consulte http://stackoverflow.com/questions/6474596/should-rails-helpers-assume-an-instance-variable-exists-or-should-they- receive -t – jibiel

Respuesta

1

Dependiendo del nivel de detalle de este cuestionario, es posible que desee utilizar un parcial. En cuyo caso la sintaxis sería:

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

Si es relativamente simple y que cree que debería estar en un ayudante debe hacer simplemente hacer quiz un parámetro. Es probable que los desarrolladores no vean con buenos ojos la necesidad de que las vistas proporcionen una variable de instancia específica para usar su ayuda.

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

También me parece que es posible que desee reestructurar sus modelos de alguna manera. Como puede ver, implementé mis ejemplos con una clase Quiz. No estoy seguro de cómo se ve su modelo de datos, pero cuando llama propiedades que están anidadas tan profundas, generalmente es una señal de que algo anda mal.

+6

Ok, pero esto realmente no responde a la pregunta original. En mi opinión, la pregunta es "usar/asumir variables de instancia vs. pasar como un parámetro". Por ejemplo, ¿se llama al ayudante tal como está, suponiendo que exista la variable @course_step? ¿O debería llamar al ayudante de la siguiente manera: current_quiz_result (@course_step), y debería la función aceptar un solo parámetro? – ybakos

+0

Para obtener una respuesta real, consulte http://stackoverflow.com/questions/6474596/should-rails-helpers-assume-an-instance-variable-exists-or-should-they- receive-t ¡Gracias, @ybakos! – jibiel

1

No he visto un buen argumento presentado para ninguno de los casos, y tropecé con esta pregunta cuando estaba buscando una respuesta. Personalmente, he estado utilizando las variables de instancia en los métodos de ayuda donde es posible, ya que este es el enfoque más seco tanto en ayuda como en vista. En lugar de pasar la variable de instancia de mi vista y definir mi método de ayuda para aceptarla, puedo usarla directamente en el asistente. Ligeramente menos tipeo, de todos modos ...

+0

... y lo haces ¿cómo? –

+1

... mediante el uso de la variable de instancia. Su ayudante tiene acceso a las mismas variables de instancia que su vista. –

Cuestiones relacionadas