无法自定义ActiveRecord错误消息标头

时间:2014-08-06 16:09:46

标签: ruby-on-rails ruby activerecord

出于某种原因,我可以成功自定义ActiveRecord中的特定错误消息,但我似乎无法更改错误消息标题。

en:
   activerecord:
    errors:
      template:
        header: 
          one: "Custom message goes here. 1 error prohibited this %{model} from being saved"
          other: "Customer message goes here. %{count} errors prohibited this %{model} from being saved"
      messages:
        blank: "custom :blank message goes here"
    models:
      complaint: "Complaint"
    attributes:
      complaint: 
        city: "Custom city name"
        neighborhood: "Custom neighborhood name"

如果我将城市和街区留空,我会收到以下错误消息:

  

2个错误禁止此投诉被保存:

     
      
  • 自定义城市名称自定义:空白消息在此处

  •   
  • 自定义社区名称自定义:空白邮件在此处

  •   

由于某种原因,实际的错误消息已更改,但错误标头未更改。在调试中,我将YML文件更改为以下内容,但未更改默认消息:

en:
    activerecord:
      errors:
        template:
          header:
            one: "blah"
            other: "blah blah"
          body: "blah blah blah"

有谁知道为什么这个简单的改变不起作用?我唯一能想到的是“标题”需要与模型有关。不确定。

我使用过的参考资料:

[http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models][1] [http://guides.rubyonrails.org/v2.3.8/i18n.html#translations-for-active-record-models][1]

2 个答案:

答案 0 :(得分:1)

您的示例中似乎有错误的间距。请检查是否总有两个空格作为缩进。

如果这不能解决问题,请检查您正在使用的Rails版本:

Rails 2.3示例

pt:
  activerecord:
    errors:
      template:
        header:
          one: "não foi possível guardar este %{model} porque encontramos um erro"
          other: "não foi possível guardar este %{model} porque encontramos%{count} erros"
        # The variable :count is also available
        body: "Encontramos problemas nos seguintes campos:"

      # The values :model: "attribute and :value are always available for interpolation
      # The value :count is available when applicable. Can be used for pluralization.
      messages:
        inclusion: "não esta incluído na lista"
        exclusion: "está reservado"
        invalid: "não é válido"

Rails 3示例

es:
  errors: &errors
    format: ! '%{attribute} %{message}'
    messages:
      ...
      taken: ya está en uso
      too_long: es demasiado largo (%{count} caracteres máximo)
      too_short: es demasiado corto (%{count} caracteres mínimo)
      wrong_length: no tiene la longitud correcta (%{count} caracteres exactos)
    template:
      body: ! 'Se encontraron problemas con los siguientes campos:'
      header:
        one: No se pudo guardar este/a %{model} porque se encontró 1 error
        other: No se pudo guardar este/a %{model} porque se encontraron %{count} errores
  activemodel:
    errors:
      <<: *errors
  activerecord:
    errors:
      <<: *errors

答案 1 :(得分:1)

问题是错误消息头实际上是从Rails 3.0开始硬编码的。从我找到的资源:

  

查看scaffold生成的app / views / users / _form.html.erb。该   错误消息是硬编码的。因此,更改语言环境文件没有   效果。

     

实际上,Rails 3.0没有使用   activerecord.errors.template.header翻译。在Rails 2.x中,   此转换用于表单的error_messages方法   构建器,但不推荐使用此方法并将其解压缩为插件。

     

如果您感到好奇,请执行以下操作:

     

-rails plugin install git://github.com/joelmoss/dynamic_form.git

     

-Edit app / views / _form.html.erb如下:

<%= form_for(@user) do |f| %>
  <%= f.error_messages %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

来源https://github.com/svenfuchs/rails-i18n/issues/118