字段错误过程,字段名称位于错误轨道中

问题描述 投票:0回答:2

我正在尝试使用

field_error_proc
在导轨中添加字段错误。但我找不到用字段名称添加错误的方法。下面是我用来生成 Rails 中存在错误的字段的代码。

ActionView::Base.field_error_proc = proc do |html_tag, instance|
  if html_tag =~ /^<label/
    %(#{html_tag}).html_safe
  else
    %(#{html_tag}<div class="help-block"><ul role="alert"><li>#{instance.error_message.first}</li></ul></div>).html_safe
  end
end

下面是上述代码的输出。我想要的是字段名称出现错误,例如“需要电子邮件”,以便具有常见的错误模式(与 FE 验证错误相同)

这是 FE 验证的输出。

ruby-on-rails ruby-on-rails-5 actionview
2个回答
1
投票

如果您显示

instance
块参数的内容,您应该看到类似这样的内容:

#<ActionView::Helpers::Tags::TextField:0x00007f54102118d8 @method_name="email", @object_name="user" # ...(more)

因此,为了获取已验证输入的方法名称,您可以使用:

ActionView::Base.field_error_proc = proc do |html_tag, instance|
  method_name = instance.instance_variable_get("@method_name").humanize
  if html_tag =~ /^<label/
    %(#{html_tag}).html_safe
  else
    %(#{html_tag}<div class="help-block"><ul role="alert"><li>#{method_name} #{instance.error_message.first}</li></ul></div>).html_safe
  end
end

0
投票

我想在这里添加一项调整。我不会调用

humanize
,而是使用对象的类来调用
human_attribute_name
。这样做的另一个好处是可以让您在区域设置中设置属性名称,使其与您的标签保持一致。

将第一行交换为:

method_name = instance.instance_variable_get("@method_name")
human_method_name = instance.object.class.human_attribute_name(method_name)
© www.soinside.com 2019 - 2024. All rights reserved.