Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 每次激活记录上都调用after_validation hook吗?_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 每次激活记录上都调用after_validation hook吗?

Ruby on rails 每次激活记录上都调用after_validation hook吗?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,验证后是否每次调用钩子,即使验证失败? 我做了两次测试,结果似乎是这样 您是对的,验证失败仍然会触发after_validation回调。这是回调的顺序: 验证前 验证后 在你保存之前 在创建之前 创建后 保存后 在你承诺之后 另外,为了理解更大的事件链:文档中说返回false的“before”回调将停止该链,并停止操作(保存、创建、更新等)。返回false的“after”回调将停止回调链,但不会停止整个操作 如果验证失败,“after_validation”是最后一个要运行的操作,并且所有操作

验证后是否每次调用
钩子,即使验证失败?
我做了两次测试,结果似乎是这样

您是对的,验证失败仍然会触发after_validation回调。这是回调的顺序:

  • 验证前
  • 验证后
  • 在你保存之前
  • 在创建之前
  • 创建后
  • 保存后
  • 在你承诺之后
  • 另外,为了理解更大的事件链:文档中说返回false的“before”回调将停止该链,并停止操作(保存、创建、更新等)。返回false的“after”回调将停止回调链,但不会停止整个操作


    如果验证失败,“after_validation”是最后一个要运行的操作,并且所有操作都在那里暂停。如果它们通过了,则所有其他内容都打包在数据库事务中,如果出现问题,则回滚。例如,您的“创建前”可以创建子对象,如果对象创建本身失败,它将安全地撤消。

    谢谢!你的计划成功了。同样,如果after_验证返回false,它会回滚事务吗?不客气!如果after\u validation返回false,它将在回调之前/之后停止任何进一步的操作,但不会停止事务本身。这可能是因为“before”回调用于检查潜在问题,“after”回调用于在成功完成某个步骤后执行任何需要执行的辅助任务。例如,您可以使用before\u validation为属性设置默认值,如果设置失败,您希望停止整个过程。如果有任何错误,您可以使用after_validation来更新“failed_create”计数器。@MVC,如果这是正确的答案,您为什么接受另一个呢??