http://railscasts.com/episodes/4-move-find-into-model?view=asciicast
@project.tasks应该是个数组吧?
@task = @project.tasks.find_incomplete
find_incomplete 是个类方法,不能这么用吧?
以后别随便说类方法,容易误解,你那个 find_incomplete 是怎么定义的,是不是类似这样:
class Task < ActiveRecord::Base
scope :find_incomplete, ......
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 也是可以调用的