在Rails中显示链接表单错误消息

mač*_*ček 12 validation ruby-on-rails internationalization ruby-on-rails-3

在我们的注册表格中,我们 validates_uniqueness_of :email

当用户尝试使用我们的注册表单并指定现有的电子邮件地址时,我希望他们看到这样的错误消息

该邮件地址已被使用.如果您在登录时遇到问题,可以重置密码

显然,我想使用命名路由作为链接,但我的用户模型无法访问它.我怎么能做到这一点?

附注:我们将很快为我们的应用程序提供翻译,所有这些错误消息将最终出现在YAML文件中.我可以以某种方式new_password_url在我的YAML语言环境文件中注入一条消息吗?(例如config/locales/en.yml)

Ell*_*son 14

我知道这是一个老问题,但对于想要在错误消息中插入链接的未来用户,这里有一些适用于我的指南.

首先,I18n错误消息已经被假定为html安全,因此您可以继续编写合适的错误消息.在这个例子中,我正在更改"发送电子邮件"消息.

# config/locales/en.yml
activerecord:
  errors:
    models:
      user:
        attributes:
          email:
            taken: 'has already been taken. If this is your email address, try <a href="%{link}">logging in</a> instead.'
Run Code Online (Sandbox Code Playgroud)

注意插值变量%link.

现在您需要在验证器中传递该变量的值,如下所示:

# app/models/user.rb
validates :email, :uniqueness => {:link => Rails.application.routes.url_helpers.login_path}
Run Code Online (Sandbox Code Playgroud)

(默认情况下,你在这里传递的任何选项将自动发送到在翻译的I18n作为变量,包括像一些特殊的预填充变量%value,%model等等)

而已!您现在在错误消息中有一个链接.