RailsCasts #004 Move Find into Model 【把find方法封装进Model】

把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

总结

上面的例子展示了把业务逻辑封装入模型文件的做法,无论是查询还是修改,把业务逻辑封装放进数据模型,都是一种好的实践,不但可以精简代码,提高复用率,也有利于业务的解耦。

你可能感兴趣的:(RailsCasts #004 Move Find into Model 【把find方法封装进Model】)