为什么after_find和after_initialize事件的回调是将它们定义为方法?

时间:2010-05-11 06:31:23

标签: ruby-on-rails callback

为after_find和after_initialize事件定义回调的唯一方法是将它们定义为方法。如果你尝试使用第二种方法将它们声明为处理程序,它们将被默默地忽略。

有人可以解释为什么会这样吗?

为什么专门针对这两个回调?

修改

从书中: - Rails必须使用反射来确定是否有要调用的回调。在进行真正的数据库操作时,与数据库开销相比,这样做的成本通常并不显着。但是,单个数据库select语句可能返回数百行,并且必须为每个行调用两个回调。这会显着减慢查询速度。 Rails团队认为,在这种情况下,性能胜过一致性。 我勒个去...!!!!多数民众赞成......这就是解释...... !!!

1 个答案:

答案 0 :(得分:2)

来自the API

  

after_find和after_initialize异常

     

因为为查找器找到并实例化的每个对象调用了after_find和after_initialize,例如Base.find(:all),我们必须实现一个简单的性能约束(在简单的测试用例上速度提高50%) 。与所有其他回调不同,只有在定义了显式实现(def after_find)时才会运行after_find和after_initialize。在这种情况下,将调用所有回调类型。