RailsCasts #003 Find Through Association【通过关联查找数据】

把RailsCasts中的视频讲的内容总结成文章,每个视频对应一片文章,希望可以帮助到那些想要学习RailsCasts 但又被英文阻碍的同学。


通过关联查找数据

我们有两个数据模型,Project 和 Task, 并且使用 has_many 和 belongs_to 定义了相互的关联关系。

class Project < ActiveRecord::Base
  has_many :tasks
end

class Task< ActiveRecord::Base
  belongs_to :project
end

现在在 ProjectController 的 show 页面,我们要展示项目和任务的信息, 对应后台代码为

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

上面的代码分别查出了@project和@tasks数据, 但是,查询的过程并没有用到我们定义的关联关系。
当模型之间定义了关联关系后,我们可以使用更加优雅、简介的方式来查询。改进上面的代码如下

class ProjectController < ApplicationController
  def show
    @project = Project.find(params[:id])
    @tasks = @project.tasks
  end
end

上面的代码可以查出所有和@project关联的task, 但是却缺少了一个过滤条件,complete = false, 继续改进

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

还记得上一节讲过的find_by 动态方法吗?继续改进

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

你可能感兴趣的:(RailsCasts #003 Find Through Association【通过关联查找数据】)