2014-03-26 26 views
0

所以,我試圖修復代碼,我們正在做一個渲染在POST中,真正擰緊用戶可怕的後退按鈕(和刷新按鈕了! )。爲了擺脫討厭的「你確定你想要再次發佈」通常只是簡單地去POST-> redirect-> GET模式,但使用某種短期cookie來處理我需要通過的錯誤(以及一個cookie用於輸入用戶的內容,所以他不會失去他的輸入)。在playframework中,這是flash cookie(它在下面的GET請求中被刪除)。在軌道上的紅寶石錯誤形式重定向到現有的頁面和顯示錯誤

  1. 我可以假設在軌道上的紅寶石,它也在我需要的閃存範圍內?
  2. 保存PER輸入框中的所有錯誤的模式或示例是什麼,以便在GET時,ruby大多會自動處理錯誤,讓我將它們粘貼到每個字段中? - 我正在使用simple_form_for

我是一個完整的newb to rails,但在java中有很多重量級和輕量級http框架的經驗。

如果有人知道現有的一個GET控制器方法和POST控制器方法的完整示例將是驚人的?我只是在我的後控制器方法中調用validation.keep()(保存錯誤)和params.flash()(保存用戶輸入),並自動將錯誤映射到GET上的表單字段。我什麼都不做。基本上這樣(見postUser方法)https://github.com/deanhiller/timecardz/blob/master/app/controllers/OurPattern.java

我希望紅寶石有一些簡單的東西。

感謝, 院長

回答

2

Rails不這樣做開箱。對於它的價值來說,它是在Rails中發佈後的「標準」。碼流是這樣的:

  1. POST與不適當數據執行給控制器
  2. 控制器拉起相關模型實例,它改變爲無效狀態,試圖節省
  3. 模型對象觸發驗證錯誤,保存不會保持放入各實例的#errors方法
  4. 錯誤消息
  5. 被傳遞給要呈現的模板此同一對象
  6. 表單處理程序,在這種情況下,simple_form_for(一個偉大的寶石順便說一句)看到#errors是非空的,並添加css類和消息,但它被配置爲這樣做。如果沒有什麼有趣的事情發生,這應該「正常工作」。

因此,它實際上內置於rails以具有您嘗試解決的行爲,因爲它取決於模型實例在整個渲染過程中是相同的。這就是說,Rails確實具有一次性使用的Flash參數,因此您可以將發佈的表單數據存儲在Flash中,並在下一個請求中重新更新驗證對象。只要注意代碼在主驗證者之外執行任何驗證工作。即object.valid?object.save需要總是導致相同的錯誤,但是沒有什麼能夠阻止你(在錯誤地)在before_save回調中添加驗證錯誤。

A similar SO postthis PRG github project看起來非常有用,可以避免在這裏單獨使用。

+0

呈現在用戶後像螺絲釘螺絲釘.... 1。我發佈,它失敗了。我點擊回來,瀏覽器問我是否要轉發....好吧,但我想回去...它有點打破流量,迷惑用戶大時間,這就是爲什麼PRG(post redirect get)是這樣的大問題以及爲什麼大多數人現在都遵循這種模式......在這方面,瀏覽器後退按鈕和刷新按鈕不再被破壞。 –

+0

哦,謝謝你的鏈接! –

+0

哦,最糟糕的是當你在帖子後面進一步閱讀6頁時,並且點擊後退按鈕10次以回到你知道你一次登錄的頁面,並開始詢問你是否要轉貼(大多數用戶就像「什麼?我不知道我在這裏發佈的內容」)。不做PRG模式是非常糟糕的用戶體驗。 –

相關問題