【问题标题】:How to do Error Message Interpolation in Rails with Devise?如何使用 Devise 在 Rails 中进行错误消息插值?
【发布时间】:2014-03-24 20:06:24
【问题描述】:

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

有一个answer to another question 建议如何在Rails 中进行此操作,但在使用Devise 时并没有解决问题。尝试在电子邮件上定义自定义验证时,服务器甚至不会启动。 See the 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 模型中的链接?
  • 试过了,设计失败了
  • 试试我在下面发布的代码。让我知道失败的原因,我很乐意提供帮助

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


【解决方案1】:

尝试从 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}

【讨论】:

  • 实际上,在 user.rb 中有这个,服务器甚至都不会启动。 pastebin.com/SiNh9LjC
  • 是的,无论如何它可能不是要走的路。你不应该把它带入模型中。我将创建一个测试应用程序,看看我能想出什么
  • 如果没有设计,这正是它的样子。但是使用 devise 时,您会尝试两次验证同一个字段,这会导致启动应用程序失败。
【解决方案2】:

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

devise :validatable

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

当尝试覆盖单个现有验证时,Rails 3.2 在初始化期间失败。因此,在使用 Devise 验证时,要么全力以赴,要么全力以赴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多