在Ruby on Rails中,错误消息如何显示?

3

你好,我想了解在Ruby on Rails中如何显示错误消息,更重要的是错误消息在页面上显示的顺序是如何确定的。

感谢您的时间。

2个回答

2

显示错误的最常见方式是使用辅助程序error_messages

<%= f.error_messages %>

据我所知,它会向存储在@my_object.errors哈希中的错误消息添加一些HTML标记。错误消息是有序哈希,并且按照您在模型中指定验证的顺序排序(至少在我的应用程序中是这样的)。您可以在此处了解有关Errors类的更多信息。
由于error_messages只是一个辅助工具,因此您可以编写自己的辅助函数来显示错误消息。

有趣的是,这种方式对我不起作用。与模型中的顺序相比,错误消息的顺序是随机的。 - iJK
也许这与 Ruby 版本有关。毫无疑问,OrderedHash 在 Ruby 1.9 中存在,但我正在使用 1.8.7,并且在 Rails 中它是存在的并且可以工作。在任何 ActiveRecord 对象上的控制台中尝试 some_object.errors。它是否在打印结束时给出了 @errors=#<OrderedHash {}> - klew
你使用的是哪个版本的Ruby和RoR? - klew
我之前使用的是 Ruby 1.8.7 和 Rails 2.3.4。我刚刚升级到了 2.3.5,现在错误信息按照在模型中声明的顺序显示。真是太好了...这个问题让我抓狂了。感谢你的帮助 :-) - iJK

1

Active Record 提供了许多预定义的验证助手。每次验证失败时,错误消息都会添加到对象的错误集合中,并将此消息与正在验证的字段相关联。有关验证的更多详细信息,请参见这个优秀的指南

我认为由于验证目标存储在哈希中,它们的顺序永远不能保证。但是有许多现有的插件可以自定义和增强默认验证。快速搜索可得到 CleverValidationCustomErrorMessage...

您可能也会对这篇博客文章感兴趣,其中介绍了如何自定义验证。


有人可以编写一个出色的插件,它能按顺序显示错误。我确实觉得很奇怪,为什么没有其他人遇到这个问题或者副作用。 - iJK
这篇文章看起来非常有帮助。谢谢。 - iJK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接