在我们的注册表单上,我们validates_uniqueness_of :email
当用户尝试使用我们的注册表单并指定现有的电子邮件地址时,我希望他们看到这样的错误消息
该邮件地址已被使用。如果您在登录时遇到问题,您可以重置你的密码 http://example.com/reset_password
显然,我想使用链接的命名路由,但我的用户模型无权访问它。我怎样才能做到这一点?
边注:我们将很快为我们的应用程序提供翻译,所有这些错误消息最终都会出现在 YAML 文件中。我可以以某种方式注射我的new_password_url
在我的 YAML 语言环境文件的消息中? (例如。,config/locales/en.yml
)
我知道这是一个老问题,但对于想要在错误消息中插入链接的未来用户,这里有一些对我有用的指南。
首先,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.'
注意插值变量%link
.
现在您需要做的就是在验证器中传递该变量的值,如下所示:
# app/models/user.rb
validates :email, :uniqueness => {:link => Rails.application.routes.url_helpers.login_path}
(默认情况下,您在此处传递的任何选项都会作为变量自动发送到 I18n 翻译器,包括一些特殊的预填充变量,例如%value
, %model
, etc.)
就是这样!您的错误消息中现在有一个链接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)