当前位置:编程学习 > 网站相关 >>

RailsCasts中文版,#3 Find Through Association 使用级联查询

这个例子中我们有一个Project类,其中通过has_many方法定义包含多个Task:
[ruby] 
class Project < ActiveRecord::Base 
  has_many :tasks 
end 

在Task任务类中通过belongs_to定义它属于一个Project:
[ruby] 
class Task < ActiveRecord::Base 
  belongs_to :project  www.zzzyk.com
end 

项目类的控制器ProjectsController中定义了一个show方法,用来返回一个项目及其包含的未完成项目供前台页面展示。通过调用Task类的find方法找到满足project_id与Project的id并且complete属性是false条件的所有任务。
[ruby] 
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的级联查询功能。代码中如下的行可以被替换
[ruby] 
@tasks = Task.find(:all, :conditions => ['project_id = ? AND complete = ?', @project.id, false]) 


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

这意味着可以在find命令中不指定project_id参数,因为我们就是在我们要的那个那个Project对象上调用查询的Task查询方法的。
用#2视频讲到的动态字段查询方法可以进一步进行简化:
[ruby] 
@tasks = @project.tasks.find_all_by_complete(false) 

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,