2011-09-09 18 views
0

我試圖在我的控制器中使用redirect_to,同時仍然保留驗證錯誤的Flash消息。在這個網站的其他帖子,建議答案是使用:Ruby on Rails:如何在redirect_to時保持驗證錯誤,而不會在cookie中存儲太多

閃光燈[:錯誤] = @ object.errors redirect_to的object_path

不幸的是,如果有(在我的案件10)有很多錯誤,我得到一個ActionDispatch :: Cookies :: CookieOverflow 錯誤,因爲顯然@ object.errors對象太大而無法存儲在cookie中。

我真的很喜歡使用重定向而不是渲染出於其他原因我沒有提到,由於他們的複雜性。

有什麼建議嗎?

回答

1

您應該使用activerecord存儲而不是cookie存儲,因爲後者不能存儲大對象。

配置/初始化/ session_store.rb:

MyApp::Application.config.session_store :active_record_store 

然後

rake db:sessions:create db:migrate 

這應該解決您的問題

0

只儲存的錯誤信息,而不是物體如。 @object.errors.full_messages

0

對於可以存儲在cookie中的內容,當Rails將對象轉換爲文本以寫入cookie時,它的大小可能會超過該限制。

Ruby on Rails的ActionDispatch ::餅乾:: CookieOverflow錯誤

出現這種CookieOverflow錯誤的方式。

解決這個問題的最簡單方法是,您需要更改session_store並且不要使用cookie_store。您可以通過示例使用active_record_store。

下面是步驟

  1. 生成一個用於創建會話表

    耙分貝遷移:會話:創建

  2. 運行遷移

    耙分貝:遷移

  3. 修改conf cookie_store,:IG /初始化/從

    (APP):: Application.config.session_store session_store.rb密鑰=> 'XXX'

(APP)::應用的.config。session_store:active_record_store

一旦你完成了三個步驟,重新啓動你的應用程序。 Rails現在將使用會話表來存儲會話數據, ,您將不會有4kb的限制。