MongoDB 如何跳过 after_save 等回调方法?

lehug · 2016年07月10日 · 最后由 hrz3424 回复于 2017年03月29日 · 7745 次阅读

在我代码初始化数据的时候,我不希望他执行回调,因为这样执行效率比较慢,我希望初始化完毕后,统一执行以下回调。但是查阅了一些 rails 跳过回调的文档,提供的方法 mongodb 没法识别,mongodb 官方文档也没有跳过回调的说明,求助大神们,怎么操作可以跳过回调?

项目是 rails4.6+mongodb

我参考过的文章: https://docs.mongodb.com/ecosystem/tutorial/mongoid-callbacks/ http://guides.ruby-china.org/active_record_callbacks.html

如果 callback 不是根据事件自动触发,那么它挂错了钩子或者不应该作为 callback。

MongoID 不是 ActiveRecord 的全等替换,如果你依赖 ActiveRecord 的特性,那么应该使用 ActiveRecord 和关系数据库。

#1 楼 @rei 项目不能更改数据库,请问下 mongodb 怎样可以跳过回调?

#2 楼 @lehug 不写成回调。

#3 楼 @rei 改成方法,在需要触发的时候单独调用这个方法?这样维护起来不方便,mongodb 怎么没有跳过回调呢~

可以全局禁用回调,做数据迁移的时候可以考虑这样做 http://stackoverflow.com/questions/3046919/how-to-skip-callbacks-on-mongoid-documents 注意:全局哦...

#5 楼 @jasl 谢谢,很有用

印象中直接用 record.set(xxx: 'yyy') 就可以了吧。

可以自己在 Class 里加一个

attr_accessor :ignore_callbacks

然后在回调里判断 ignore_callbacks 是否为 true。然后想要不调用回调的时候只需要把 ignore_callbacks 设成 true 就行了

lehug 关闭了讨论。 07月26日 10:48
需要 登录 后方可回复, 如果你还没有账号请 注册新账号