我希望能够提供国际化,有用的错误消息。
我有嵌套表单提交的一般错误消息部分视图呈现
# _error_messages.html.erb - Fragment
...
<strong><%= t('errors.template.body') %> </strong>
<ul>
<% object.errors.full_messages.each do |msg| %>
<li><%= msg %> </li>
<% end %>
</ul>
...
我得到国际化的正文消息,但是,我无法弄清楚如何替换该属性,或者更具体地说,该模型字段的“:blank”错误(即validates_presence_of:name)验证尽管有多次yaml迭代。< / p>
这是我的yaml片段
en:
errors: &errors
format: ! '%{attribute} -- %{message}'
messages:
accepted: must be accepted
blank: must not be blank
body: ! 'There were problems with the following fields:'
activemodel:
attributes:
family_wizard:
children: kids
我写了这样的yaml,因为当我将子项名称字段留空时(> validates_presence_of:name)检查传递给partial的错误对象时,看起来像这样:
#<ActiveModel::Errors:0x007111111C111111 @base=#<FamilyWizard id: nil, ...>,
@messages {:children=>["must not be blank"]}>
但我能得出的唯一错误信息是:
以下字段存在问题:
理想的解决方案错误消息如下所示:
以下字段存在问题:
这个Stack Overflow问题(How to localize a generic error messages partial in Rails 3.2.3?)在正确的轨道上,但它缺少我想要的activemodel / activerecord验证部分。
答案 0 :(得分:0)
这个问题的答案是我的范围错误,因为我的yaml文件存在两个问题。错误的间距和错误的标签。它应该是activerecord而不是activemodel,而activerecord范围应该与树中的错误范围处于同一级别。
为了翻译模型的属性(即,儿童到孩子),yaml看起来像这样:
en:
errors: &errors
format: ! '%{attribute} -- %{message}'
messages:
accepted: must be accepted
blank: must not be blank
body: ! 'There were problems with the following fields:'
activerecord:
attributes:
family_wizard:
children: kids
帮助我得到答案的两个资源是: