6

我正在尝试自定义用户在错误输入数据时在表单顶部看到的错误消息警报。我尝试自定义的错误消息警报适用于嵌套形式的模型属性。

我在这里尝试了解决方案,它说要编辑config/locales/en.yml文件,但这只会更改消息,而不是在错误消息之前显示的模型和属性的名称。

我还尝试了比利在下面的回答中提出的建议,结果相同。IE

1 个错误禁止保存此远足小径:
- 来自“我的自定义空白错误消息”的路线说明

有没有办法让我在错误消息中显示对用户更友好的模型和属性名称,或者将它们完全从错误消息中删除?

这是我所拥有的:

配置/语言环境/en.yml

    # Sample localization file for English. Add more files in this directory for other locales.
    # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
en:  
  activerecord:
    models: 
      direction: "In the Getting There section"
    attributes:
      direction:
        directions_from: "From field"
    errors:
      full_messages:
      format: "%{message}"
      models:
        direction:
          attributes:
            directions_from:
              blank: "My Custom Blank Error Message"

模型

class Direction < ActiveRecord::Base
  belongs_to :hikingtrail

  attr_accessible :directions_by, :directions_desc, :directions_from

  validates :directions_from, :presence => {message: "'My Custom Error Message'", :if => Proc.new { |a| a.directions_by? || a.directions_desc? } }

  validates :directions_by, :presence => {message: "'My Custom Error Message'", :if => Proc.new { |a| a.directions_from? || a.directions_desc? } }

  validates :directions_desc, :presence => {message: "'My Custom Error Message'", :if => Proc.new { |a| a.directions_from? || a.directions_by? } }
end
4

2 回答 2

6

您可以使用:message选项来分配自定义错误消息。

例子:

validates :directions_from, presence: true, 
  message: "'Direction from' really really really can't be blank!"

然后此自定义错误消息将显示<%= msg %>在表单视图中。

参考:http ://edgeguides.rubyonrails.org/active_record_validations.html#message

添加 回答OP关于评论的问题,即网页中显示的消息不是很友好,显示结果为“Direction from 'Direction from'的方向真的真的真的不能为空”

原因是视图模板用于errors.full_messages显示错误消息。您可以使用两个选项轻松自定义它:

选项 1:编写没有主题的自定义消息。IEreally can't be blank

message选项 2:像以前一样用完整的句子写信息,但只在视图中引用,而不是full_message

例子:

<% @hikingtrail.errors.messages.each do |msg| %>
    <li><%= msg %></li>
<% end %>

参考:http ://rubydoc.info/docs/rails/3.2.8/ActiveModel/Errors (full_message只不过是attribute和的混合message

于 2013-03-29T01:39:36.450 回答
0

使用 Rails 6,现在可以full_messages在模型或属性级别自定义 helper 使用的格式。

en:
  activerecord:
    errors:
      models:
        direction:
          attributes:
            directions_from:
              format: "%{message}"
              blank: "'Direction from' really really really can't be blank!"

这样,针对此错误生成的消息将是您的不带模型前缀的消息,而其他模型和属性的默认 full_messages 则保持不变。

本文中的更多信息: https ://blog.bigbinary.com/2019/04/22/rails-6-allows-to-override-the-activemodel-errors-full_message-format-at-the-model-level -and-at-the-attribute-level.html

于 2020-04-07T14:30:52.093 回答