把RailsCasts中的视频讲的内容总结成文章,每个视频对应一片文章,希望可以帮助到那些想要学习RailsCasts 但又被英文阻碍的同学。
把find方法封装进Model
我们有一个模型Task, 我们要查询所有未完成的任务可以这样写
class TaskController < ApplicationController
def index
@tasks = Task.find_all_by_complete(:false, :order => "created_at DESC")
end
end
可是如果有很多地方需要进行这种查询的话,就需要吧这段查询代码拷贝到不同的地方,下面我们这段业务相关的查询封装进Task模型文件里
class Task < ActiveRecord::Base
belongs_to :project
def self.find_incomplete
find_all_by_complete(:false, :order => "created_at DESC")
end
end
在不同的地方要完成同样的查询就可以改为下面的写法
Task.find_incomplete
更方便的是,我们也可以在关联查询的结果上调用上面的方法
class ProjectsController < ApplicationController
def show
@project = Project.find(params[:id])
@tasks = @project.tasks.find_incomplete
end
end
总结
上面的例子展示了把业务逻辑封装入模型文件的做法,无论是查询还是修改,把业务逻辑封装放进数据模型,都是一种好的实践,不但可以精简代码,提高复用率,也有利于业务的解耦。