2011-08-02 12 views
1

這裏是我的形式:simple_form不顯示驗證錯誤的具體方式之一,

= simple_form_for [@post, @comment] do |f| 
    = f.input :text, :label => false 
    = f.button :submit 

評論嵌套帖子資源的範圍內。評論驗證:validates :text, :length => { :minimum => 5 }

評論控制器:

def create 
    @post = Post.find params[:game_id] 
    comment = @post.comments.build :user_id => current_user, :text => params[:comment][:text] 

    comment.save 
    redirect_to @post 
end 

形式本身工作正常。如果我輸入5個以上的字符,評論將被創建。但是,如果它更少,我只是被重定向到posts#show,並且在表單中沒有驗證錯誤(我檢查了源代碼)。

我也嘗試填寫設計註冊表單,如果失敗,我可以看到錯誤。

我想問題是由重定向造成的。但無論如何,我不知道如何解決它。

回答

5

如果您重定向用戶,錯誤將丟失,除非您的應用程序以某種方式記住它們。有兩種方法可以解決這個問題:

  1. 不要將用戶重定向,而只是用render顯示錯誤信息的視圖。例如,Devise就是這樣做的。

  2. 重定向用戶,但以某種方式傳輸錯誤消息。有很多方法可以做到這一點,例如將它們保存爲一個簡單的字符串,或者以一些序列化的形式保存在閃存中。但是這通常更加複雜,只有在重定向是必要的時候才應該這樣做。

+1

謝謝。我必須堅持第二種選擇。這是什麼讓我最終:http://stackoverflow.com/questions/5512875/how-can-i-pass-validation-error-messages-to-a-method-in-a-different-controller – bassneck