从服务器验证后收到的响应中获取未保存的文档

时间:2018-07-18 14:43:56

标签: ruby-on-rails

我正在使用(必须)Rails 3.2.12和红宝石1.9.3,并且将mongoid作为orm

也许我的问题没有道理,但让我问

我想知道未验证文档的ID或任何其他未验证的属性。

就像下面的屏幕截图一样,我想要获取一个属性无效的第二个文档的ID。呈现此页面是因为未通过服务器验证。

enter image description here

1 个答案:

答案 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(因为尚未保存),但如果是更新操作,则它应出现在错误哈希中。