把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)