2010-11-09 33 views
4

我正在使用Devise進行身份驗證,並且登錄表單中的登錄使用閃現通知而不是表單錯誤來顯示登錄時出現的任何問題。但我想突出顯示適當的表單字段像通常在軌道形式發生相關的錯誤。有人知道怎麼做嗎?如何使用Devise捕獲登錄頁面中的表單錯誤

+1

你是否已經看到了這一點的http:// railscasts。 com/episodes/209-introduction-devise和這個http://railscasts.com/episodes/210-customizing-devise? – microspino 2010-11-09 19:28:45

+1

我見過這些。它仍然顯示整個登錄表單的一個錯誤。 – 99miles 2011-08-26 03:06:41

回答

0

根據您的Rails版本(前3與否),你可以使用:

<%= f.error_messages_for :model %> 

的Rails版本3.0在使用前該代碼來處理和格式錯誤。在Rails 3中,這個方法已經被棄用了。您需要安裝此plugin才能使用上面的erb代碼。

您可以在this asciicast的「新功能」一章中閱讀有關此更改的更多詳細信息。

This tutorial涵蓋了基於devise和cancan構建認證系統的全過程。

+1

我的問題更具體到設計登錄表單的工作方式。問題是它不會以這種形式添加錯誤消息,它只是設置一個Flash通知。這就是我想要解決的問題。 – 99miles 2010-11-09 19:45:21

1

默認設計誤差函數色器件1.1.5可以在色器件寶石發現:

色器件-1.1.5 /應用/助理/ devise_helper.rb

module DeviseHelper 
    def devise_error_messages! 
    return "" if resource.errors.empty? 

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join 
    sentence = "#{pluralize(resource.errors.count, "error")} prohibited this #{resource_name} from being saved:" 

    html = <<-HTML 
    <div id="error_explanation"> 
     <h2>#{sentence}</h2> 
     <ul>#{messages}</ul> 
    </div> 
    HTML 

    html.html_safe 
    end 
end 

我想你可以如果您希望它的行爲不同,請覆蓋此模塊/函數。

+1

這沒有爲我工作。沒有產生錯誤信息。也許事情已經改變。 – 2011-11-16 23:59:46

0

錯誤存儲在一個地圖:

resource.errors 

如果你的表單字段名爲:email,你可能會得到相關的錯誤是這樣的:

resource.errors[:email] 
+3

這是exaclty什麼設計沒有?¬¬ – robertokl 2012-09-01 02:03:15

+0

你是什麼意思?錯誤沒有存儲在resource.errors中,或者你無法使用resource.error [:email]獲取它們?一年前,他們在那裏。 – 2012-09-01 08:46:11

+0

出於良好的實踐原因,用戶輸入錯誤憑據時引發的錯誤是「無效的用戶名或密碼」。因此,無法爲一個或其他字段指定錯誤。 – robertokl 2012-09-03 14:43:58