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
end

项目类的控制器ProjectsController中定义了一个show方法,用来返回一个项目及其包含的未完成项目供前台页面展示。通过调用Task类的find方法找到满足project_idProjectid并且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)

转自:http://railscasts.com/episodes/3-find-through-association?language=zh&view=asciicast



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值