如何使用Devise在登录页面中捕获表单错误

时间:2010-11-09 19:17:33

标签: ruby-on-rails devise

我正在使用Devise进行身份验证,登录表单使用Flash通知而不是表单错误来显示登录时的任何问题。但我想突出显示相关错误的相应表单字段,如通常在rails表单中发生的那样。有谁知道怎么做?

3 个答案:

答案 0 :(得分:1)

devise 1.1.5的默认设计错误函数可以在设计gem中找到:

设计-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 :(得分:0)

根据您的Rails版本(3之前或之前),您可以使用:

<%= f.error_messages_for :model %>

3.0之前的Rails版本使用此代码来处理和格式化错误。在Rails 3中,这种方法已被弃用。您需要安装此plugin才能使用上面的erb代码。

您可以在this asciicast的“新功能”一章中阅读有关此更改的更多详细信息。

This tutorial涵盖了基于设计和cancan建立身份验证系统的整个过程。

答案 2 :(得分:0)

错误存储在地图中:

resource.errors

如果您的表单字段名为:email,则可能会出现以下相关错误:

resource.errors[:email]