2012-04-09 28 views
1

我有一個相當複雜的視圖,有多個窗體,對這些窗體,分頁和其他功能進行大量驗證。驗證失敗時,我喜歡使用渲染,因爲那樣您可以更加具體地瞭解表單中發生的錯誤。但是,當我使用渲染不同的編譯器錯誤時,例如「未定義的方法`total_pages'[]:Array」和「undefined model_name」。這是一種情況,當我不得不使用redirect_to或以某種方式解決視圖渲染時出現的錯誤是可行的。謝謝一堆!何時使用渲染與redirect_to處理錯誤驗證

回答

10

你應該從他們的角度去理解事情。

爲什麼render代替redirect

  • 當您使用render,你通過實例化對象

  • 這個對象,新創建或更新,收到了一些PARAMS

  • 當試圖保存對象時,會觸發驗證,如果不成功,則將錯誤添加到當前實例中

  • 所以你的對象在內存中包含驗證錯誤。

但是當你使用重定向,重新啓動一個新的堆棧,它不知道在內存中的對象前任何東西,也不可能有任何魔法:

  • 無論對象是保存,並可以從數據庫

  • 獲得持續的數據,或者如果它不救,你可以有你以前存儲在會話中的某些信息


要回答你的問題更近一點:在使用渲染之前,必須實例化頁面所需的所有對象。

這只是邏輯視圖失敗,如果預期的實例變量丟失。

+0

大解釋,讓我很好地把握它。謝謝。 – 2014-01-07 22:49:46

2

首先,這些不是編譯器錯誤 - 它的運行時錯誤。
其次,您應該檢查控制器中的數據以確保其呈現正確進行渲染,或者在視圖中執行一些條件塊以應對這些不同的數據結構。

最後,redirect_to只是一個,它可以用在這裏四處移動用戶的技術,但是你仍然需要處理這些錯誤,即使在重定向到網頁...

HTH