锁定老帖子 主题:after_find不见了
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-13
Rails -v #=>Rails 1.1.6 如果没有after_find,怎么在读取数据之后,使用数据之前,在models 加入能够被自动调用的预处理方法呢? PS: after_initialize 也找不到 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-13
可以使用Observers.
|
|
返回顶楼 | |
发表时间:2006-09-13
其它一些callbacks都是在修改记录后调用,find可能是因为这个原因没有加入。
你可以这样来做: def self.find(*args) result = super(*args) logger.debug(result.class) result end 显然不光是可以做after。。。 |
|
返回顶楼 | |
发表时间:2006-09-13
查了一下,并不是真的不支持,只要加这点代码:
after_find "puts 111" protected def after_find end 这个可能多次执行,每一条记录被find出来都会执行一次。 |
|
返回顶楼 | |
发表时间:2006-09-13
qiezi 写道 查了一下,并不是真的不支持,只要加这点代码:
after_find "puts 111" protected def after_find end 这个可能多次执行,每一条记录被find出来都会执行一次。 after_find 的code在 ActiveRecord::Callback 中不存在,而其他的callback都有. 前面一个改写find的方法,我试了下可以,这个方法没有看明白怎么用 |
|
返回顶楼 | |
发表时间:2006-09-13
qiezi 写道 查了一下,并不是真的不支持,只要加这点代码:
after_find "puts 111" protected def after_find end 这个可能多次执行,每一条记录被find出来都会执行一次。 after_find 的code在 ActiveRecord::Callback 中不存在,而其他的callback都有. 前面一个改写find的方法,我试了下可以,这个方法没有看明白怎么用 ............... 晕 点了2下提交 还没有删除的地方 |
|
返回顶楼 | |
发表时间:2006-09-13
你看文档不仔细啊:
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. |
|
返回顶楼 | |
发表时间:2006-09-13
cookoo 写道 你看文档不仔细啊:
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. 谢谢提醒了,不过这里提到一个效率问题,实际上 每次进行这样的计算的确很慢,那么能否指计算一次呢? 换句话说,就是在rails中能否使用一般意义上的单件类。类似这种after_find的操作,每次的计算基本上一样的。如果能够使用单件类,就能够极大的改善性能。不过这样的单件类得要提供给所有的用户使用,而且只能计算一次. |
|
返回顶楼 | |
发表时间:2006-09-13
after_finder 和before_finder方法,rails做了特别处理。因为影响性能,他会先找你的module里有没有定义这个方法,如果没有定义。他就不调用。不起作用。要使用就得类似这样:
after_find "puts 111" protected def after_find end //抄楼上仁兄的代码 ;) rails那本书中讲到过。也可以查看文档。如上。 关于单件类,是针对每个object对象一个单件类.是为了给对象动态增加方法的.那么如何让所有的对象都指向一个单件类呢?反过来说,如果都指向一个单件类的话,不就是他们的共同的class了么.又绕回来了. |
|
返回顶楼 | |
发表时间:2006-09-13
jack 写道 谢谢提醒了,不过这里提到一个效率问题,实际上 每次进行这样的计算的确很慢,那么能否指计算一次呢? 换句话说,就是在rails中能否使用一般意义上的单件类。类似这种after_find的操作,每次的计算基本上一样的。如果能够使用单件类,就能够极大的改善性能。不过这样的单件类得要提供给所有的用户使用,而且只能计算一次. 什么叫计算一次?大部分时候都需要针对不同对象具体计算的,性能改善总得在满足需求的前提下。如果是不针对具体数据/对象的计算那就如上面qiezi说的过载一下类方法好了, 所谓修改类的单子类就是修改类方法。 |
|
返回顶楼 | |