Rails 收到验证失败错误,但 ActiveRecord 错误模型中没有错误

2024-03-13

我在使用 save! 保存模型时遇到验证错误问题。 ActiveRecord 错误模型错误消息为空白,因此我不知道验证尝试中发生了什么错误。当我根据以下内容尝试errors.full_messages或errors.each_full时文档 http://ar.rubyonrails.org/classes/ActiveRecord/Errors.html,它应该显示错误,但事实并非如此。

我试图保存的模型是订单模型(使用 Spree 的电子商务网站)。当订单中的某个项目被删除时,update_totals!被调用重新计算总数,然后保存!被调用,这会触发验证错误(此错误很少发生,但仅在我登录时发生,我还没有找到原因)。订单模型在其模型中有两个验证:

  validates_numericality_of :item_total
  validates_numericality_of :total

我记录了 order.item_total.inspect、order.total.inspect 和 order.errors.full_messages.inspect 并得到了这个:

Wed Jan 25 08:53:08 -0800 2012order item total: #<BigDecimal:15780c60,'0.279E2',8(16)>
Wed Jan 25 08:53:08 -0800 2012order total: #<BigDecimal:152bf410,'0.2448225E2',12(20)>
Wed Jan 25 08:53:08 -0800 2012: ERRORS SAVING ORDER: 
Wed Jan 25 08:53:08 -0800 2012[]

item_total 和total 在mySQL 数据库中存储为decimal(8,2)。最后一行是 order.errors.full_messages.inspect,它是一个空数组。验证错误如下所示:

ActiveRecord::RecordInvalid (Validation failed: {{errors}}):
  vendor/extensions/mgx_core/app/models/order.rb:382:in `update_totals!'
  vendor/extensions/mgx_core/app/controllers/line_items_controller.rb:7:in `destroy'
  app/middleware/flash_session_cookie_middleware.rb:19:in `call'
  C:\Users\mgx\My Documents\Aptana Studio 3 Workspace\catalogue-spree\script\server:3
  c:/Ruby187/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:112:in `debug_load'
  c:/Ruby187/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:112:in `debug_program'
  c:/Ruby187/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.16/bin/rdebug-ide:87
  c:/Ruby187/bin/rdebug-ide:19:in `load'
  c:/Ruby187/bin/rdebug-ide:19

我想我的问题是双重的:

1. 为什么我的 activerecord 错误模型没有说明验证错误是什么?

2. 如何解决这个问题?我的 item_total 和total 是否可以保存为decimal(8,2)?

我使用的是 Rails 2.3.5 和 spree 0.10.2


当你有before_validation声明以及它们是否返回false然后你会得到一个Validation failed (ActiveRecord::RecordInvalid)带有空错误消息的消息(如果没有其他错误)。

注意before_validation回调不得返回false (nil没关系),这可能会偶然发生,例如,如果您正在分配false回调方法内最后一行的布尔属性。明确写出return true在你的回调中methods使这项工作有效(或者只是true最后如果你的回调是block(正如杰西·沃尔加莫特在评论中指出的那样))。

UPDATE:从 Rails 5.0 开始,这将不再是问题,因为return false将不再停止回调链(throw :abort现在将停止回调链)。

UPDATE: 您可能还会收到ActiveRecord::RecordNotSaved: Failed to save the record如果回调返回false.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 收到验证失败错误,但 ActiveRecord 错误模型中没有错误 的相关文章

随机推荐

  • Python-UDP客户端

    我目前正在阅读Pythonbook https www nostarch com blackhatpython并遇到了以下示例 import socket target host 127 0 0 1 target port 80 creat
  • LD_PRELOAD __libc_start_main 的 Makefile

    我想做的事情很简单 当我启动猫鼬服务器时 我想创建一个额外的线程来完成一些额外的工作 为了做到这一点 我想我需要LD PRELOAD the libc start main服务器的 This is spec hooks cpp typede
  • 与邮递员的 CORS

    这个问题已经被问过几次了 但我还是不明白 当我读到有关的答案时 没有 Access Control Allow Origin 标头 问题 它说应该在请求的服务器上设置一个设置以允许跨域 add header Access Control A
  • 适用于 Windows 的 Composer 安装 -

    所以我尝试在我的 Windows 操作系统上安装 Composer 并设置 Laravel 但是当我运行安装时 我不断收到相同的错误 首先 我选择了 php exe 因为它从目录中询问C wamp bin php php5 4 16 我单击
  • JIT 编译的代码驻留在哪里?

    所以我有这个方法 用Java编写 public void myMethod int y int x 5 y doSomething x 并假设我的应用程序多次调用此函数 当在Java虚拟机上运行该方法的编译代码时 JVM将首先解释该方法 然
  • 如何使用 IF EXIST 条件检查目录或文件是否存在?

    如何检查目录或文件是否存在IF EXIST健康 状况 Such as If exist C Windows OR C Windows2 rem Do something else rem Something else 我该怎么做 简单例子1
  • 应该在带花括号的 return 语句中调用哪个构造函数?

    考虑以下代码 struct NonMovable NonMovable default NonMovable const NonMovable default NonMovable NonMovable delete NonMovable
  • 调度程序 BeginInvoke 语法

    我一直在尝试遵循一些 WCF 数据服务示例并具有以下代码 private void OnSaveCompleted IAsyncResult result Dispatcher BeginInvoke gt context EndSaveC

  • 元素可以有结束标签吗?

    我的同事并不真正了解或理解 html 她的工作是向 CMS 输入信息 我注意到她一直关闭她 hr 像这样的标签 hr 我有谷歌 但我找不到任何地方说这是不允许的或可能会导致问题 我知道它应该是 hr 但值得我告诉她还是这是不必要但有效的标记
  • Apollo重新获取不重新渲染组件

    我正在使用 graphql 从网络服务获取数据 我的客户端代码是这样的 import React Component from react import Platform StyleSheet Text ActivityIndicator
  • React - 加载外部脚本的问题

    我正在从事我的第一个 React 项目 并且对 JS 有点陌生 我正在努力解决一个非常基本的问题 我想知道调试这个的最佳实践是什么 我确实创建了我的应用程序create react app我没有成功加载外部脚本 令人惊讶的是 到目前为止 我
  • Aiohttp、Asyncio:运行时错误:事件循环已关闭

    我有两个脚本 scraper py 和 db control py 在 scraper py 我有这样的东西 def scrape category field pages search use proxy proxy file loop
  • JavaScript YUI3 使用全局变量?

    我不知道如何从 YUI3 中更新全局变量 考虑以下代码 window myVariable data one var yuiWrap YUI use node function Y console log window myVariable
  • Spring - 如何正确使用@Autowired来防止controller / MockMvc为空?

    我正在尝试运行一些单元测试并遇到一个问题 我确信该问题源于对自动装配的误解 我有一个单元测试类 我正在尝试使用 Autowired在 MockMvc 和 REST 控制器上 两者最终都为 null 我看到一些消息来源试图解释为什么会发生这种
  • 局部变量和寄存器变量可以声明为 extern 吗?

    我一直想知道是否可以在本地声明 extern 和寄存器变量 如果可以的话 会受到什么限制 在某些情况下 局部变量可以声明为 extern 让我们来读一下C99 N1256标准草案 http www open std org JTC1 SC2
  • 在python opengl中使用图像中的2d点获取空间中的3d点

    我正在尝试模拟房间中的深度相机 我的相机能够在世界中移动和旋转 并且房间被模拟为围绕 0 0 0 的 3d 立方体 单击按钮时 我想对图像中的 N 个随机点进行采样 并获取这些点与相机的距离 现实世界 中的距离 到目前为止 我已经成功创建了
  • 使用工作表格式时,text_wrap 格式会被忽略

    换行文本对我不起作用 我尝试了下面的代码 writer pd ExcelWriter out file name engine xlsxwriter df input to excel writer sheet name Inputs wo
  • 从 ManagedVM 内公开多个端口

    我正在使用托管 VM 功能来运行 WebSocket 服务器 我希望通过以下 URL 在任何端口 最好是端口 80 上向 Internet 公开该服务器 mvm mydomain com 我还没有取得多大成功 以下是我用来完成此任务的各种文
  • 如何在oracle中将2列合并(合并)为1列?

    当用户输入表名和 2 个需要合并的列名时 我有 3 个文本字段 我应该如何将 2 列值合并 组合 为 1 列值 我用的是oracle 11g企业版 连接 select col1 col2 from tablex
  • Rails 收到验证失败错误,但 ActiveRecord 错误模型中没有错误

    我在使用 save 保存模型时遇到验证错误问题 ActiveRecord 错误模型错误消息为空白 因此我不知道验证尝试中发生了什么错误 当我根据以下内容尝试errors full messages或errors each full时文档 h