我有一张en.yml,其中包含以下内容

en:
  article:
    title:
      format: "Requires at least one alphanumeric character"
    title_format: "Title Requires at least one alphanumeric character"

article.title.format在我的文章模型中使用,article.title_format在文章测试中使用.有什么方法可以把它弄干吗?

推荐答案

YAML对于这类东西是有限的,但是您确实有锚、别名和Merge_Key.在这个问题上,This SO answer是非常详尽的.

因此,您可以重复完全相同的消息,但不能在没有其他库或代码注入的情况下修改该消息:

&standard_answer: "Requires at least one alphanumeric character" 
en:
  article:
    title:
      format: *standard_answer
    title_format: *standard_answer

在Ruby中,相当于:

en:
  article:
    title:
      format: "Requires at least one alphanumeric character" 
    title_format: "Requires at least one alphanumeric character" 

回答你没有问的问题...

如果您正在try 测试模型验证,我认为您做得太多了:

  • 如果Rails决定调整所使用的语言,这些将会被 destruct
  • 您的测试现在依赖于您的i18n文件来查找硬编码的字符串
  • 它的可读性较差,因为测试约束现在位于两个单独的文件中(但它更紧凑,所以您可以争辩说)

您想知道的是:"我可以在标题中没有任何字母数字字符的情况下保存此记录吗?"

我只会测试验证是成功还是失败.

如果您使用RSpec,则为I like this pattern.

或者,另一种 Select ,RSpec Expectations ships with Predicate matchers:

# prove the record is valid
expect(record).to be_valid

# make the record invalid in only 1 way
record.title = 'does not have a number'
expect(record).to be_invalid # also works: expect(record).not_to be_valid

请注意,我首先要确保记录有效,然后更改一项内容,然后再次判断有效性.这有助于确保您测试的是正确的验证.

Ruby-on-rails相关问答推荐

未捕获语法错误:try 编辑TRIX时,请求的模块未在Rails 7.1中提供名为默认的导出(在youtube.js:1:8)

在PDF生成中渲染 colored颜色

使用ActiveSupport::TimeWithZone将UTC转换为用户定义的时区

一对多关联 counter_cache 在 Rails 中无法正确重新加载

组织和/或存储我一直在 RSpec 中使用的模拟对象的最佳方式是什么?

从 rails 5 升级到 6 和 zeitwerk

Ruby on rails 查询不知道怎么写

正确更新其他列的更新列

Rails 4 中的 null_session 和 reset_session 有什么区别?

有没有一种简单的方法可以让 pow 为 https 服务?

查找日期时间与今天匹配的记录 - Ruby on Rails

Rails 服务对象与 lib 类

如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?

为什么 respond_with 被从 rails 4.2 移除到它自己的 gem 中?

在 RoR 中引用同一个表的多个外键

如何检测导致 Rake 中的弃用警告的原因

Coffeescript ||= 模拟?

rake db:回滚不起作用?

在 GIT 中处理 Rails db/schema.rb 文件的正确方法是什么?

为什么 Mac OS X 带有 ruby​​/rails?