2011-03-11 118 views
10

我有個幫手控制器:Ruby on Rails的助手 - 在助手使用實例變量

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 

它可以訪問其在CourseSteps控制器秀「行動」定義@course_step。這是在助手中使用實例變量的常見做法嗎?

+0

請嘗試更清楚地說明你的問題。 – polarblau 2011-03-11 15:57:06

+0

@polarblau我已經清理了我的問題 – 2011-03-11 16:38:43

+0

實際的答案請參閱http://stackoverflow.com/questions/6474596/should-rails-helpers-assume-an-instance-variable-exists-or-should-they-receive -t – jibiel 2012-06-27 07:12:04

回答

1

根據此測驗結果的詳細程度,您實際上可能需要使用部分測驗。在這種情況下,語法是:

<%= 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類實現了我的例子。我不確定你的數據模型是什麼樣的,但是當你調用深層嵌套的屬性時,它通常是一個錯誤信號。

+6

好的,但這並不能真正回答原來的問題。在我看來,問題是「使用/假定實例變量與傳遞作爲參數。」例如,假設@course_step變量存在,助手是否按原樣調用?或者你應該像這樣調用助手:current_quiz_result(@course_step),並且該函數是否接受單個參數? – ybakos 2011-06-24 22:47:17

+0

對於實際的答案,請參閱http://stackoverflow.com/questions/6474596/should-rails-helpers-assume-an-instance-variable-exists-or-should-they-receive-t謝謝@ybakos! – jibiel 2012-06-27 07:14:37

1

我還沒有看到針對這兩種情況提出的良好論點,並且在尋找答案時偶然發現了這個問題。就我個人而言,我一直在助手方法中使用實例變量,因爲這是輔助方法和視圖中最乾燥的方法。我可以直接在助手中直接使用它,而不是從我的視圖中傳遞實例變量並定義我的幫助器方法來接受它。無論如何,打字略少...

+0

...你怎麼做? – 2012-12-07 17:17:55

+1

...通過使用實例變量。您的幫助程序可以訪問您的視圖所使用的相同實例變量。 – 2012-12-12 20:24:00