2008年5月11日星期日

RailsCasts 004 move find into model

在controller里:
@tasks = Task.find_all_by_complete(false, :order => 'created_at DESC')
改成:
@tasks = Task.find_incomplete
然后在model里定义incomplete方法,这是一个class方法,前面要加self:
def self.find_incomplete
find_all_by_complete(false, :order => 'created_at DESC')
end
注意方法定义体里的find…方法前不用加self,因为当前的作用域就是model类本身。
到这里都看似很平常,下面神奇的就来了。在episode 003里介绍的关联查询也可以用这里定义的find_incomplete方法:
@project = Project.find(params[:id])
@tasks = @project.tasks.find_all_by_complete(false, :order => 'created_at DESC')
可以改成:
@tasks = @project.tasks.find_incomplete
也就是说,凡是Task的class方法,都可以在@project.tasks这样的关联查询中使用。

没有评论: