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

總結

上面的例子展示了把業務邏輯封裝入模型文件的做法,無論是查詢還是修改,把業務邏輯封裝放進數據模型,都是一種好的實踐,不但可以精簡代碼,提高復用率,也有利于業務的解耦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容