我有一个带有两个字段的模型(书签),称它们为A和B.
在创建新模型时,我必须对B执行相当复杂的检查,如果true
更新数据库中的书签(将A设置为正在传递的书签)并中止创建,如果false
只是SQL (0.2ms)
保持它并创建一个新的书签。
所以我设置了一个before_create过滤器。调用的函数的问题是,如果我对检索到的对象执行update_attributes然后返回false(为了中止保存),则不执行更新(由于某种原因我不知道)。
update_attributes返回true并且没有错误,但在日志中我只看到
{{1}}
如果我没有返回false,则记录会正确更新,但它也会插入一条新记录(我不希望这样)。有什么帮助吗?
答案 0 :(得分:1)
取消回调
如果before_ *回调返回false,则取消所有后续回调和相关操作。如果after_ *回调返回false,则取消所有后续回调。回调通常按照定义的顺序运行,但定义为模型上的方法的回调除外,这些回调最后被调用。
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
答案 1 :(得分:0)
使用回调功能时,update_attribute
回调中对before_create
的任何来电都会发出错误信息。
我也被这个意外地咬了。我认为这个源代码来自rails api,一个内线,或者一篇现在让我失望的博客文章,抱歉。
这个复杂的电话不是验证吗?
或许你可以拔出update_attribute并在复杂的逻辑之后使用它?