我的模型:
class Person
has_many :projects
class Project
belongs_to :person
has_many :tasks
class Task
belongs_to :project给定一个person实例person = Person.find(10),有没有一种简单的方法来访问属于该person的所有projects的所有person?此外,如果是projects.duration < x days之类的东西,我还需要进一步过滤projects结果。我可以尝试通过person.projects手动构造结果集,然后遍历每个project以获得相关的tasks,但我希望有另一种我不知道的更简单、更优雅的语法。顺便说一句,person.projects.tasks不能工作。
发布于 2012-01-16 02:44:55
是的,有一种更优雅的方法。您可以立即加载结果。让我来给你展示。
而不过滤人员列表
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)https://stackoverflow.com/questions/8871611
复制相似问题