gpt4 book ai didi

mysql - 为什么这个二级预加载不起作用?

转载 作者:搜寻专家 更新时间:2023-10-30 23:44:37 27 4
gpt4 key购买 nike

我有三个模型,Subrating、Thing 和 Category。分割属于事物,而事物有_许多类别。

我有一个子评级列表,我正在尝试预先加载与每个子评级关联的事物关联的类别。

这是我尝试过的:


控制者

@subratings = Subrating.all( :include => { :thing => :categories })

查看

<% @subratings.sort_by(&:rating).reverse.each do |subrating| %>
<%= subrating.thing.categories.sort_by(&:thing_count).second.name %>
<% end %>

但它并没有解决我的 n+1 问题。我什至不确定数据库是否延迟加载事物或类别或两者,但这是在我的服务器中重复出现数百次的行:

CACHE (0.0ms)  SELECT COUNT(*) FROM "things" INNER JOIN "category_things" ON "things"."id" = "category_things"."thing_id" WHERE "category_things"."category_id" = $1  [["category_id", 1]]

我做错了什么?


协会

class Subrating < ActiveRecord::Base
belongs_to :thing
end

class Thing < ActiveRecord::Base
has_many :category_things
has_many :categories, :through => :category_things
has_many :subratings
end

class Category < ActiveRecord::Base
has_many :category_things
has_many :things, :through => :category_things
end

class CategoryThing < ActiveRecord::Base
belongs_to :category
belongs_to :thing
end

最佳答案

也许你应该尝试调用 Model 类中的 include,例如:

@subratings = Subrating.includes(thing: [:categories])

http://apidock.com/rails/ActiveRecord/QueryMethods/includes 中所述

虽然它也应该按照您尝试的方式工作,因为 .all.find(:all) 的别名,但我建议尝试:

@subratings = Subrating.all( :includes => { :thing => [:categories] })

(请注意,我将 include 更改为 includes 并使 thing 指向一个数组)

关于mysql - 为什么这个二级预加载不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30516652/

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