如何覆盖模型验证模型中的错误消息

时间:2013-09-01 21:46:30

标签: ruby-on-rails ruby-on-rails-3 devise

我的应用是rails 3 +设计。我正在为用户构建一个注册表单。如果用户没有输入电子邮件地址,我正在努力提供有用的错误消息。

我相信设计有一些魔力正在使它变得一团糟。在我的用户模型中,我有:

user.rb

validates :email,:presence => {:message => "XXXXXXX."}

我的en.yml:

en:
    activerecord:
        attributes:
            user:
                fname: "First name"
                lname: "Last name"
                photo_content_type: "Picture"
        errors:
            messages:
                blank: "cannot be blank"
                too_short: "is too short (minimum %{count} characters)"
                too_long: "is too long (maximum %{count} characters)"
            models:
                user:
                    attributes:
                        email:
                            taken: "the email address %{value} has already been registered"
                        password:
                            too_short: "the password is too short (minimum %{count} characters)"

在我的注册页面中,如果用户没有输入电子邮件,我会收到以下@errors:

@messages={:email=>["cannot be blank", "XXXXXXX"]}>

为什么我收到两条错误消息?我怎样才能得到一条错误消息。我需要找到一种方法来删除“不能空白”。可以在user.rb中覆盖吗?

由于

1 个答案:

答案 0 :(得分:7)

您可以通过Devise完成验证,但更改其消息。根据{{​​3}},您应该为密钥activerecord.errors.models.user.attributes.email.blank编写自定义消息,以便它优先于默认值:

en:
activerecord:
    attributes:
        user:
            fname: "First name"
            lname: "Last name"
            photo_content_type: "Picture"
    errors:
        messages:
            blank: "cannot be blank"
            too_short: "is too short (minimum %{count} characters)"
            too_long: "is too long (maximum %{count} characters)"
        models:
            user:
                attributes:
                    email:
                        blank: "XXXXXXX."
                        taken: "the email address %{value} has already been registered"
                    password:
                        too_short: "the password is too short (minimum %{count} characters)"