gpt4 book ai didi

ruby-on-rails - rails : how to load 2 models via join?

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

我是 Rails 的新手,如果能帮助我优化数据库使用,我将不胜感激。

有没有办法通过一个数据库查询加载两个相互关联的模型?

我有两个模型人物和图像:

class Person < ActiveRecord::Base
has_many :images
end

class Image < ActiveRecord::Base
belongs_to :person
end

我想使用连接命令通过单次访问数据库来加载一组人及其相关图像。例如,在 SQL 中,我可以使用以下查询加载我需要的所有数据:

select * from people join images on people.id = images.person_id where people.id in (2, 3) order by timestamp;

所以我希望这个 rails 片段能满足我的需要:

>> people_and_images = Person.find(:all, :conditions => ["people.id in (?)", "2, 3"], :joins => :images, :order => :timestamp)

此代码执行我期望的 SQL 语句并加载我需要的 Person 实例。但是,我看到访问一个人的图像会导致额外的 SQL 查询。

>> people_and_images[0].images


Image Load (0.004889) SELECT * FROM `images` WHERE (`images`.person_id = 2)

在对 find() 的调用中使用 :include 选项确实加载了两个模型,但是通过与 JOIN 一起执行它会花费我额外的 SELECT。

我想在 Rails 中做我在 SQL 中能做的事情,即通过一个查询获取我需要的所有数据。

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

你想像这样使用:include

Person.find(:all, :conditions => ["people.id in (?)", "2, 3"], :include => :images, :order => :timestamp)

查看 find documentation for更多详情

关于ruby-on-rails - rails : how to load 2 models via join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1319485/

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