定义 after_find 和 after_initialize 事件回调的唯一方法是将它们定义为方法。如果您尝试使用第二种技术将它们声明为处理程序,它们将被默默地忽略。
有人能解释一下为什么会这样吗?
为什么专门针对这两个回调呢?
EDIT
摘自书中:——
Rails 必须使用反射来确定是否有要调用的回调。当进行实际的数据库操作时,与数据库开销相比,这样做的成本通常并不显着。但是,单个数据库选择语句可能返回数百行,并且必须为每行调用两个回调。这会显着减慢查询速度。 Rails 团队认为在这种情况下性能胜过一致性。
我勒个去...!!!!仅此而已..仅作为解释...!!!
From the API http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html:
after_find 和 after_initialize 异常
因为 after_find 和 after_initialize 是为查找器找到并实例化的每个对象调用的,例如 Base.find(:all),所以我们必须实现一个简单的性能约束(在简单的测试用例上速度提高 50%)。与所有其他回调不同,after_find 和 after_initialize 仅在定义了显式实现(def after_find)时才会运行。在这种情况下,将调用所有回调类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)