在Devise Error上显示的属性名称

时间:2014-03-06 18:09:25

标签: ruby-on-rails devise

我正在尝试自定义我的设计错误消息,但属性名称始终包含在消息中。

我已经更改了我的en.yml文件:

en:
  activerecord:
    errors:
      models:
        user:
          attributes:
            password:
              blank: "Error"
      full_messages:
        format: "%{message}"

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 = 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
end

因此,例如在上面的代码中显示的错误消息是 “密码错误”,当我只想显示“错误”

2 个答案:

答案 0 :(得分:1)

你应该使用

en:
  errors:
    format: "%{message}"

答案 1 :(得分:1)

您正在设计帮助器的重写full_messages中调用devise_error_messages!方法。 full_messages方法会将attribute name添加到验证error message之前。

替换

messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join

messages = resource.errors.messages.map { |attr,msg| content_tag(:li, msg.join(', ')) }.join

请参阅我对this SO question的回答以获得更好的主意。