Skip to content

Override devise_error_messages! for views

Daniel Zanzini edited this page Aug 19, 2019 · 6 revisions

[DEPRECATED] As noted on devise_helper.rb, overriding devise_error_messages! is no longer recommended. It's better to modify the devise/shared/_error_messages partial.


The devise_error_messages! method is overridden by adding a devise_helper.rb application helper.

The standard implementation (below) can be cut and paste in then tweaked to your requirements. It can also be helpful to define a convenience method to check for their presence in your views:

module DeviseHelper
  def devise_error_messages!
    return "" unless devise_error_messages?

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
    sentence = I18n.t("errors.messages.not_saved",
                      :count => resource.errors.count,
                      :resource => resource.class.model_name.human.downcase)

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

    html.html_safe
  end

  def devise_error_messages?
    !resource.errors.empty?
  end

end

You could also check the current devise_helper.rb for any new change not reflected in this wiki.

More information at this StackOverflow thread.

Clone this wiki locally