【发布时间】:2010-04-14 18:43:07
【问题描述】:
我正在寻求有关按需加载关联的 Ruby 优化方面的帮助。
这是一个简化的例子。我有 3 个模型:Post、Comment、User。引用是:Post 有很多 cmets,Comment 引用了 User (:author)。现在,当我转到帖子页面时,我希望看到帖子正文 + 所有 cmets(以及他们各自的作者姓名)。这需要以下 2 个查询:
select * from Post -- to get post data (1 row)
select * from Comment inner join User -- to get comment + usernames (N rows)
在我的代码中:
Post.find(params[:id], :include => { :comments => [:author] }
但它没有按预期工作:正如我在后端看到的,仍然有 N+1 个命中(虽然其中一些被缓存了)。我该如何优化它?
UPD 经过一番调查,看起来代码是正确的,但如果我在 Comment 模型中命名了 belongs_to,它就不能按预期工作。一旦我从 :author 更改为 :user ,它就按预期工作了。
【问题讨论】:
标签: ruby-on-rails optimization activerecord associations