2011-03-11 15 views
10

Ben bir denetleyici için bir yardımcınız var:Ruby on Rails Yardımcıları - yardımcıları örnek değişkenlerden kullanma

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 

Bu CourseSteps kontrolör gösterisi "eylem" tanımlanmıştır @course_step erişimi vardır. Örnek değişkenleri yardımcılarda kullanmak için bu yaygın uygulama mıdır?

+0

Lütfen sorunuzun ne olduğunu daha açık bir şekilde anlatmaya çalışın. – polarblau

+0

@polarblau Sorumu temizledim –

+0

Gerçek cevap için lütfen http://stackoverflow.com/questions/6474596/should-rails-helpers-assume-an-instance-variable-exists-or-should-they-receive adresini ziyaret edin. -t – jibiel

cevap

1

Bu sınav sonucu için ayrıntı düzeyine bağlı olarak aslında bir kısmi kullanmak isteyebilirsiniz. nispeten basit olursa

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

ve bunu bir yardımcı, sadece üzerinde yapmak quiz bir parametre yapmalıdır olması gerektiğini düşünüyorum: Hangi durumda sözdizimi olacaktır. Yardımcınızı kullanmak için belirli bir örnek değişkeni sağlamak için görünüm gerektiren diğer geliştiriciler tarafından büyük olasılıkla kaşlarını çatlatacaktır.

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

Ayrıca, modellerinizi bir şekilde yeniden yapılandırmak isteyebileceğinizi düşünüyorum. Gördüğünüz gibi örneklerimi bir Quiz sınıfı ile uyguladım. Veri modelinizin neye benzediğinden emin değilim, ancak bu kadar iç içe geçmiş özellikleri çağırdığınızda genellikle bir şeyin yanlış olduğuna dair bir işarettir.

+6

Tamam, ama bu asıl soruya gerçekten cevap vermiyor. Benim düşünceme göre, soru "örnek değişkenleri kullanıp parametre olarak geçmeyi varsaymaktır." Örneğin, @course_step değişkeninin varlığını varsayar mı? Veya yardımcıyı şu şekilde çağırmalısınız: current_quiz_result (@course_step) ve işlev tek bir parametreyi kabul etmeli mi? – ybakos

+0

Gerçek cevap için lütfen bkz http://stackoverflow.com/questions/6474596/should-rails-helpers-assume-an-instance-variable-exists-or-should-they-receive-t Teşekkürler, @ybakos! – jibiel

1

Her iki durum için sunulan iyi bir argüman görmedim ve bir yanıt ararken bu soruya tökezledim. Şahsen, yardımcı değişkenlerde yardımcı değişkenlerde örnek değişkenleri kullanıyorum, çünkü bu hem yardımsever hem de görüş açısından en kuru yaklaşımdır. Örnek değişkeni benim görüşümden aktarmak ve onu kabul etmek için yardımcı yöntemimi tanımlamak yerine, onu doğrudan yardımcıda kullanabilirim. Biraz daha az yazarak, yine de ...

+0

... nasıl yapıyorsunuz? –

+1

... örnek değişkenini kullanarak. Yardımcınızın görüşünüzün yaptığı aynı örnek değişkenlere erişimi vardır. –