RailsCasts中文版,#3 Find Through Association 使用級聯查詢

這個例子中我們有一個Project類,其中通過has_many方法定義包含多個Task

class Project < ActiveRecord::Base
  has_many :tasks
end

Task任務類中通過belongs_to定義它屬於一個Project

class Task < ActiveRecord::Base
  belongs_to :project
end

項目類的控制器ProjectsController中定義了一個show方法,用來返回一個項目及其包含的未完成項目供前臺頁面展示。通過調用Task類的find方法找到滿足project_idProjectid並且complete屬性是false條件的所有任務。

class ProjectsController < ApplicationController
  def show
    @project = Project.find(params[:id])
    @tasks = Task.find(:all, :conditions => ['project_id = ? AND complete = ?', @project.id, false])
  end
end

當然還有更好的解決方案,可以使用find的級聯查詢功能。代碼中如下的行可以被替換

@tasks = Task.find(:all, :conditions => ['project_id = ? AND complete = ?', @project.id, false])

@tasks = @project.tasks.find(:all, :conditions => [complete = ?', false])

這意味着可以在find命令中不指定project_id參數,因爲我們就是在我們要的那個那個Project對象上調用查詢的Task查詢方法的。

用#2視頻講到的動態字段查詢方法可以進一步進行簡化:

@tasks = @project.tasks.find_all_by_complete(false)

作者授權:You are welcome to post the translated text on your blog as well if the episode is free(not Pro). I just ask that you post a link back to the original episode on railscasts.com.

原文鏈接:http://railscasts.com/episodes/3-find-through-association

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章