http://railscasts.com/episodes/4-move-find-into-model?view=asciicast
@project.tasks应该是个数组吧?
@task = @project.tasks.find_incomplete
find_incomplete 是个类方法,不能这么用吧?
看了一下,貌似确实有问题啊
@project.tasks应该是 task 的数组吧,应该是不能用find_incomplete方法的
@project.tasks
find_incomplete
挖坟啊,那个时候的 association 返回的是啥?现在都用 scope 了,别纠结了。
#2 楼 @doitian 瞎说,现在都不用 scope 了,改写类方法了
以后别随便说类方法,容易误解,你那个 find_incomplete 是怎么定义的,是不是类似这样:
class Task < ActiveRecord::Base scope :find_incomplete, ...... end
#4 楼 @fsword
class Task < ActiveRecord::Base def self.find_incomplete ...... end end
#5 楼 @xiaoronglv 这个怎么会被看作“类方法”呢?而且真要这么写的话@task = @project.tasks.find_incomplete会失败的吧
@blueplanet @fsword find_incomplete 不会出错的啊 @project.tasks 在控制台下确实是数组 但实际上是 Relation .tasks .find_incomplete 调用的都是 sql 语句,至于为什么可以连用,是因为返回的是 AR::Relation,scope 能够连续调用(chaining)和 lazy evaluation 都是因为 AR::Relation 的原因 前不久看过一篇 ROR 的博客写的就是 activerecord 3 的改进,现在我记不得地址了,不过到 speakerdeck.com 去搜 activerecord 可以找到这方面的资料,为了确定我所说的我也建了 demo 试了一下。
@blueplanet self.find_incomplete 确实是类方法,但是重点是在方法里面的代码啊 Rails c 下,Task.find_incomplete 也是可以调用的
#6 楼 @fsword sorry,原代码中有 self,我漏了。。。。
冏。 已经修改了帖子。 灰常抱歉。
#7 楼 @dfang 原来如此。我只是单独写了个类跑了一下,场景完全不对啊。应该继承ActiveRecord跑一下的。
ActiveRecord