gpt4 book ai didi

ruby-on-rails - 预先加载现有对象

转载 作者:行者123 更新时间:2023-12-04 20:03:39 28 4
gpt4 key购买 nike

在 Rails 中,当您创建这样的新对象时,您可以预先加载关联:

@person = Person.find(params[:id], :include => {:flights => :plane})

但是,有时我已经有了@person 对象,然后想急切地加载关联。似乎没有任何“rails ”方法可以做到这一点。我基本上在寻找这样的东西:
@person = Person.find(params[:id])
...
@person.include({:flights => :plane})

背景是,我有一个之前的过滤器,它已经创建了没有关联的@object。但是在某些操作中,如果我不急于加载关联,我将生成大量单一查询。和做
@person = Person.find(params[:id])
...
@person = Person.find(params[:id], :include => {:flights => :plane})

好像有点浪费。

最佳答案

在 Rails 2 中,你可以使用 scoped创建适当的查询:

 @person.flights.scoped(:include => :plane)

在 Rails 3 中,您可以按照 Rails 3 方式执行此操作:
 @person.flights.include(:plane)

您可能会考虑添加 :include您的 has_many 的选项声明,因此在从 Person 加载时默认包含它:
 has_many :flights, :include => :plane

您也可以为 Flight 添加默认范围,从而使 Flight 上的任何查询都包括其平面:
 default_scope :include => :plane

关于ruby-on-rails - 预先加载现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811821/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com