鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > ruby > >

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

来源:互联网 作者:佚名 时间:2012-11-22 14:52
这个例子中我们有一个Project类,其中通过has_many方法定义包含多个Task: class Project ActiveRecord::Base has_many :tasksend 在Task任务类中通过belongs_to定义它属于一个Project: class Task ActiveRecord::Base belongs_to :projectend 项目类的控制

这个例子中我们有一个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_id与Project的id并且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.

原文链接:

服务器空间
网友评论
<