我正在使用(必须)Rails 3.2.12
和红宝石1.9.3
,并且将mongoid作为orm
也许我的问题没有道理,但让我问
我想知道未验证文档的ID或任何其他未验证的属性。
就像下面的屏幕截图一样,我想要获取一个属性无效的第二个文档的ID。呈现此页面是因为未通过服务器验证。
答案 0 :(得分:0)
尽管您的问题尚不清楚,是什么导致验证失败,但是“不能为空”文本通常来自ActiveModel::Errors
。
每当模型验证失败并重新呈现页面时,页面都会传递一个如下所示的哈希值(类Item
失败:create
的示例,因为它缺少名称):
#<ActiveModel::Errors:0x00007fe63fcff710
@base=#<Item id: nil, name: nil, user_id: 15, created_at: nil, updated_at: nil>,
@messages={:name=>["can't be blank"]},
@details={:name=>[{:error=>:blank}]}>
在该哈希中,您将拥有许多有用的信息(包括示例中显示的“不能为空的错误”)。您可以通过多种不同的方式来捕获这些错误,但是通常您需要使用控制器中的实例变量来实现。例如:
class WhateverController < ApplicationController
def create
@thing = Thing.new(thing_params)
if @thing.save
...do success stuff...
else
flash[:error] = @thing.errors.full_messages
render :new
end
end
end
在else语句的顶部调用Byebug(或类似名称),然后您可以在控制台中查看@thing.errors
中的内容
如果未创建记录,则哈希中将没有ID(因为尚未保存),但如果是更新操作,则它应出现在错误哈希中。