【发布时间】:2014-11-26 10:13:20
【问题描述】:
tl;博士:
是否有一种简单的方法来获取单个模型(在这种情况下为用户)上的一个属性 (confirmation_token) 和错误 (:invalid) 组合的自定义完整错误消息?或者使用设计配置覆盖消息?
上下文
我正在使用 Rails 4 开发一个项目,我被要求更改 Devise 用来告诉用户注册确认令牌(注册确认电子邮件中包含的链接的一部分)无效的错误消息。
Devise 有一个不错的 Yaml 配置文件来编辑错误消息,但该错误似乎没有出现在那里。查看 Devise 的代码,它只是在用户模型的 Confirmation_token 字段上创建了一个标准的“:invalid”错误,呈现为正常的活动记录错误(使用errors.full_messages)。
(方法调用解析为find_or_initialize_with_errors,默认设置为':invalid'。)
我可以对项目进行猴子补丁设计或分叉,但这应该是最后的手段。特别是对于基本上是副本更改的内容。
我研究在config/locales 文件夹中使用en.yml 来设置自定义消息。不幸的是,根据 Rails 文档,错误消息格式似乎是全局设置的:
https://github.com/rails/rails/blob/master/activemodel/lib/active_model/locale/en.yml#L4
所以除非我弄错了,如果我想避免使用“确认令牌”开始错误消息,那么我必须找到所有可能由任何表单提交返回的完整错误消息,并确保它们仍然有意义。然后大多数人会说“无效”或“不能为空白”之类的无用的话。
不用说这个项目中有很多表格,所以这个解决方案超出了这个错误修复的范围。
我可以给属性一个人名 "" 或 "The" 或者我想的,但这可能会在其他地方产生连锁反应,所以最好避免。
我徒劳地寻找一种方法来将错误消息格式字符串的范围限制为单个属性或模型。
大概“Rails 方式”是覆盖验证器中的完整消息,但在这种情况下,该代码隐藏在 gem 中。我能想到的解决这个问题的唯一方法是老套或脆弱。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 devise rails-i18n