繁体   English   中英

如何使用Devise在Rails中进行错误消息插值?

[英]How to do Error Message Interpolation in Rails with Devise?

我有一个运行Devise 2.3的Rails 3.2应用程序。 我将电子邮件地址保留为默认身份验证密钥。 当用户尝试使用现有电子邮件地址创建新帐户时,我想向他显示指向登录名和重置密码页面的链接。

另一个问题答案 ,建议如何在Rails中进行此操作,但是使用Devise时并不能解决问题。 尝试在电子邮件上定义自定义验证时,服务器甚至无法启动。 参见pastebin

有没有一种方法可以覆盖或劫持Devise添加的错误消息以改用我自己的错误消息? 还是有一种添加全局插值的方法?

这是我想显示的消息:

  taken: email already used, please <a href='%{login_link}'>login</a> or <a href='%{reset_link}'>reset your password</a>

该应用尝试显示它,但抱怨缺少插值键。 如何使用已在电子邮件上进行验证的Devise分配插值键?

这可能不是此问题的典型示例,因为应用程序链接是相当静态的,并且在这里可以进行硬编码。 如果要插值其他真正的动态值怎么办?

尝试从user.rb文件传递这些

validates :email, :uniqueness => {:login_link => Rails.application.routes.url_helpers.new_user_session_path, 
                                  :reset_link => Rails.application.routes.url_helpers.new_user_password_path}

AFAIK是不可能的,只要通过在身份验证模型上声明以下内容来使用Devise的默认验证即可:

devise :validatable

为了在使用Devise时在带有YAML语言环境文件的Rails中使用错误消息变量插值,必须手动声明所有验证,并且必须停用由Devise提供的验证。

当尝试覆盖单个现有验证时,Rails 3.2在初始化期间失败。 因此,在使用Devise验证时,这是一个全过程或全过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM