2011-12-04 46 views
0

我正在通過構建一個應用程序來練習我的Rails開發技能,該應用程序將爲用戶提供不同類型的練習。最可能的事情就像針對不同主題的多選題。Rails - 模型或控制器或其他地方的方法?

檢查問題是否被正確回答的一種方法是在模型上使用驗證。但是,我並不需要保存結果,並且最終可能會創建很多不同的模型,因爲每個問題都會有自己的驗證來檢查每個答案。

是否爲每個主題區域創建新的控制器操作?是

我還可以組織這個嗎?

回答

0

http://www.enode.com/x/markup/tutorial/mvc.html

隨着MVC模式,控制器通常在操縱由模型保持數據的控制。

將您的大部分邏輯保留在控制器中是一種很好的形式。我不確定你的新控制器操作是什麼意思,但是你可能想要做的是在你的視圖中設置某種形式(參見form_for),然後將其發送給控制器。控制器執行驗證或任何你需要它做的事情。

這應該是有幫助的: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

因此,例如,你可能在你的視圖(例如測驗)形式,計算出用戶在控制器得分,並保存爲一個場用戶在你的數據庫中。

+0

謝謝,但如果我有20或30次測驗,控制器變得非常笨重。然後,我是否將這些方法粘貼在助手中? – Leahcim

+0

助手用於不斷重複的代碼。所以不,你不會把它放在幫手裏面。相反,你應該考慮有一個測驗數據結構,由你的模型維護。字段的例子可能是「正確答案」。這樣,如果你有一堆多選題測驗,每個測驗都可以在D.R.Y中驗證。在你的控制器中很重要,而控制器不必知道哪些答案是正確的。 http://oldwiki.rubyonrails.org/rails/pages/DRY – varatis

+0

爲了詳細說明,在你的控制器中,你可能有一個check_correct_answers方法,它可以檢查任何多項選擇測驗(通過從給定的測驗中提取​​數據) – varatis

0

關於何處放置邏輯的辯論與涉及的模式本身一樣古老。對於MVC,我決定問自己:

  • 是否涉及模型的邏輯必不可少的邏輯?
  • 模型(本身)在沒有邏輯的情況下運行良好嗎?
  • 模型是否對控制器有任何要求?
  • 如果我重新使用模型,我是否想要參與其中的業務邏輯,還是會妨礙它?

我的一般建議:將業務邏輯「低」(底部:分貝,然後模型,然後控制器,然後查看)儘量不違反任何的以下限制:

  • 身份驗證和授權不屬於觀點。它可能是控制器的屬性(處理會話和一般API訪問規則等)或模型(授權:誰可以訪問哪些內容?)
  • UI /顯示/輸入方法相關的東西沒有進入型號或分貝。不要讓你的模型/數據庫決定是否以及如何呈現html,xml或json。
  • 數據一致性和完整性不在控制器/視圖中。理想情況下,您的數據模型只接受有效數據,使用事務安全並向控制器報告失敗或成功。理想情況下,一致性在db級別處理。
  • 模型應該可以與新項目中的其他控制器/視圖重用(考慮切換到另一個web api)。太嚴重的約束可能會使其在新的情況下無法使用。
  • 可能還有更多......

而且一般情況下:如果有疑問,請投入控制器。 ;)

相關問題