Rails:在模型保存中创建或更新

时间:2011-01-15 14:51:29

标签: ruby-on-rails

我有一个带有两个字段的模型(书签),称它们为A和B. 在创建新模型时,我必须对B执行相当复杂的检查,如果true更新数据库中的书签(将A设置为正在传递的书签)并中止创建,如果false只是SQL (0.2ms) 保持它并创建一个新的书签。

所以我设置了一个before_create过滤器。调用的函数的问题是,如果我对检索到的对象执行update_attributes然后返回false(为了中止保存),则不执行更新(由于某种原因我不知道)。

update_attributes返回true并且没有错误,但在日志中我只看到

{{1}}

如果我没有返回false,则记录会正确更新,但它也会插入一条新记录(我不希望这样)。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

取消回调

如果before_ *回调返回false,则取消所有后续回调和相关操作。如果after_ *回调返回false,则取消所有后续回调。回调通常按照定义的顺序运行,但定义为模型上的方法的回调除外,这些回调最后被调用。

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

答案 1 :(得分:0)

使用回调功能时,update_attribute回调中对before_create的任何来电都会发出错误信息。

我也被这个意外地咬了。我认为这个源代码来自rails api,一个内线,或者一篇现在让我失望的博客文章,抱歉。

这个复杂的电话不是验证吗?

或许你可以拔出update_attribute并在复杂的逻辑之后使用它?