捕获各个表单的错误

时间:2015-01-26 16:21:22

标签: ruby-on-rails ruby

我正在尝试捕获单个表单的验证错误,因为我在一个页面上有很多。

我使用object_id

为每个表单提供了自己唯一的ID
<% object = @document || Document.new %>
<%= form_for object, :html => { id: object.object_id.to_s } do |f| %>

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

<% if object.errors.any? %>
  # errors
<% end %>

我试过了

<% if object.object_id.errors.any? %>

但是我得到了

undefined method `errors' for 59187740:Fixnum

有没有办法解决这个问题

由于

修改

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

如何保持表单ID相同?

1 个答案:

答案 0 :(得分:0)

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

您希望为每个表单显示它们:

<%= 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_id object访问id,这是一个号码(FixNum)。您正在尝试调用方法/访问FixNum上不存在的属性。

您只需要表单的持久ID

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

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