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