捕获各个表单的错误

我试图捕获单个表单的validation错误,因为我在一个页面上有很多。

我使用object_id为每个表单提供了自己唯一的id

   { id: object.object_id.to_s } do |f| %> 

但如果我这样做以捕获错误,我的所有表单上都会出现相同的错误消息

  # errors  

我试过了

  

但我明白了

 undefined method `errors' for 59187740:Fixnum 

有没有办法解决这个问题

谢谢

编辑

我刚刚注意到,当页面重新加载时validation失败时,表单ID会发生变化,这就解释了为什么无法找到该对象的原因。

我如何保持表单ID相同?

如果真的取决于你想对错误做什么:

您想为每个表单显示它们:

 <%= form_for some_object, do |f1| %> <%= f1.error_messages %> <%= # f1 magic %> <%= form_for other_object, do |f2| %> <%= f2.error_messages %> <%= # f2 magic %> 

您想要为每个对象访问它们:

只需调用object.errorssome_object.errors

什么不适合你:

object上调用object_id访问其id是一个数字( FixNum )。 您正在尝试调用方法/访问不存在的FixNum上的属性。

您只需要一些表单的持久ID

我假设您的object来自数据库并且已经有ID。 那么你为什么不使用object.id呢? 每次Rails从DB为您创建一个ActiveRecord对象时,该对象将获得一个新的object_id 。 因此,由于内存中有新object ,因此ID不会保持不变是合乎逻辑的。 在这里阅读更多相关信息:

https://stackoverflow.com/a/3430487/2295964