gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:38:05 26 4
gpt4 key购买 nike

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

谁能解释为什么会这样?

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

编辑

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

最佳答案

来自 the API :

The after_find and after_initialize exceptions

Because after_find and after_initialize are called for each object found and instantiated by a finder, such as Base.find(:all), we‘ve had to implement a simple performance constraint (50% more speed on a simple test case). Unlike all the other callbacks, after_find and after_initialize will only be run if an explicit implementation is defined (def after_find). In that case, all of the callback types will be called.

关于ruby-on-rails - 为什么 after_find 和 after_initialize 事件的回调是将它们定义为方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com