我正在通過構建一個應用程序來練習我的Rails開發技能,該應用程序將爲用戶提供不同類型的練習。最可能的事情就像針對不同主題的多選題。Rails - 模型或控制器或其他地方的方法?
檢查問題是否被正確回答的一種方法是在模型上使用驗證。但是,我並不需要保存結果,並且最終可能會創建很多不同的模型,因爲每個問題都會有自己的驗證來檢查每個答案。
是否爲每個主題區域創建新的控制器操作?是
我還可以組織這個嗎?
我正在通過構建一個應用程序來練習我的Rails開發技能,該應用程序將爲用戶提供不同類型的練習。最可能的事情就像針對不同主題的多選題。Rails - 模型或控制器或其他地方的方法?
檢查問題是否被正確回答的一種方法是在模型上使用驗證。但是,我並不需要保存結果,並且最終可能會創建很多不同的模型,因爲每個問題都會有自己的驗證來檢查每個答案。
是否爲每個主題區域創建新的控制器操作?是
我還可以組織這個嗎?
http://www.enode.com/x/markup/tutorial/mvc.html
隨着MVC模式,控制器通常在操縱由模型保持數據的控制。
將您的大部分邏輯保留在控制器中是一種很好的形式。我不確定你的新控制器操作是什麼意思,但是你可能想要做的是在你的視圖中設置某種形式(參見form_for),然後將其發送給控制器。控制器執行驗證或任何你需要它做的事情。
這應該是有幫助的: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html
因此,例如,你可能在你的視圖(例如測驗)形式,計算出用戶在控制器得分,並保存爲一個場用戶在你的數據庫中。
關於何處放置邏輯的辯論與涉及的模式本身一樣古老。對於MVC,我決定問自己:
我的一般建議:將業務邏輯「低」(底部:分貝,然後模型,然後控制器,然後查看)儘量不違反任何的以下限制:
而且一般情況下:如果有疑問,請投入控制器。 ;)
謝謝,但如果我有20或30次測驗,控制器變得非常笨重。然後,我是否將這些方法粘貼在助手中? – Leahcim
助手用於不斷重複的代碼。所以不,你不會把它放在幫手裏面。相反,你應該考慮有一個測驗數據結構,由你的模型維護。字段的例子可能是「正確答案」。這樣,如果你有一堆多選題測驗,每個測驗都可以在D.R.Y中驗證。在你的控制器中很重要,而控制器不必知道哪些答案是正確的。 http://oldwiki.rubyonrails.org/rails/pages/DRY – varatis
爲了詳細說明,在你的控制器中,你可能有一個check_correct_answers方法,它可以檢查任何多項選擇測驗(通過從給定的測驗中提取數據) – varatis