我正在尝试捕获单个表单的验证错误,因为我在一个页面上有很多。
我使用object_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相同?
答案 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.errors
:some_object.errors
什么不适合你:
致电object_id
object
访问id
,这是一个号码(FixNum
)。您正在尝试调用方法/访问FixNum
上不存在的属性。
您只需要表单的持久ID
我假设您的object
来自数据库且已有ID。那你为什么不用object.id
呢?每当Rails从DB为您创建一个ActiveRecord对象时,该对象就会获得一个新的object_id
。因此,由于内存中有新的object
,因此ID不能保持不变是合乎逻辑的。在这里阅读更多相关信息: