加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 3 activerecord儿童记录

发布时间:2020-12-17 03:45:50 所属栏目:百科 来源:网络整理
导读:我的模特: class Person has_many :projectsclass Project belongs_to :person has_many :tasksclass Task belongs_to :project 给定一个person实例,person = Person.find(10),是否有一种简单的方法来访问属于该人的所有项目的所有任务?另外,如果projects.
我的模特:

class Person
 has_many :projects

class Project
 belongs_to :person
 has_many :tasks

class Task
 belongs_to :project

给定一个person实例,person = Person.find(10),是否有一种简单的方法来访问属于该人的所有项目的所有任务?另外,如果projects.duration<我需要进一步过滤项目结果. x天的事情.我可以尝试通过person.projects手动构造结果集,然后循环遍历每个项目以获取相关的任务,但我希望有另一种更简单,更优雅的语法,我不知道. BTW,person.projects.tasks不起作用.

解决方法

是的,有一种更优雅的方式来做到这一点.您可以急切加载结果.让我演示给你看.

没有过滤人员名单

person = Person.find(10).includes(:projects=>:tasks)

这将急切地加载你的结果,所以如果你调用person.projects.first.tasks.first它已经加载了,不再执行sql查询.

如果您想过滤它们,请执行以下操作:

person = Person.where('people.id=10 AND projects.duration < ?',x).includes(:projects=>:tasks)

如果您想在不迭代项目的情况下迭代所有任务,则必须设置如下关系:

class Person
  has_many :projects
  has_many :tasks,:through=>:projects
end

要迭代它们,请执行以下操作:

person = Person.find(10)
person.tasks.where('projects.duration < ?',x)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读