【问题标题】:Can't Customize ActiveRecord Error Message Header无法自定义 ActiveRecord 错误消息标题
【发布时间】:2014-08-06 16:09:46
【问题描述】:

由于某种原因,我可以成功自定义 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]

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案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
    

    【讨论】:

    • 非常感谢您的示例。这些空格只是撰写帖子时的复制粘贴错误。在我的代码中,间距是正确的。我使用以下代码尝试了您的示例,但错误标题仍然没有改变:`错误:&错误消息:空白:“请填写此字段。”模板:标题:一:“一个错误阻止了这个 %{model} 被保存”其他:“%{count} 个错误阻止了这个 %{model} 被保存。”活动模型:错误:
    • 如果您将应用程序控制器中的区域设置更改为 config/locales 文件夹中不存在的任何区域,您将显示“缺少区域设置”消息并提示正确路径
    • 这是个好主意。我试了一下,有趣的是,除了错误标头外,所有消息都显示了丢失的路径,它仍然显示“1 个错误禁止保存此投诉:”!似乎 Rails 甚至没有读取该字符串的 YML 文件。太奇怪了!再次感谢你的帮助!我会继续努力解决这个问题。
    【解决方案2】:

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

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

    实际上,Rails 3.0 并没有使用 activerecord.errors.template.header 翻译。在 Rails 2.x 中, 此翻译用于表单的 error_messages 方法 builder,但此方法已被弃用并作为插件提取。

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

    -rails 插件安装 git://github.com/joelmoss/dynamic_form.git

    -编辑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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2014-09-04
      • 2016-09-03
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多