Rails ActiveRecord N + 1问题

时间:2011-06-28 18:21:44

标签: ruby-on-rails activerecord select-n-plus-1

我收到了一份关于获取以下数据的声明:食品名称,食品名称,食品名称和食品类别。并且所有四个字段都在不同的表中。我正在使用这样的声明

@food_servings = FoodServing.find(params[:food_serving_id], 
                   :include => {:food => [:food_brand,:food_category] })

以下是我的模特

FoodServing  belongs_to    Food
                           Food         belongs_to    FoodCategory
                           Food         belongs to    FoodBrand

当我执行上面的语句时,我可以在日志中看到很多SQL语句正在执行,显然这是N + 1问题,我想我传递的是不正确的include参数来查找方法。任何人都可以帮我优化这个电话吗?

1 个答案:

答案 0 :(得分:1)

我现在一直在使用Rails 3,但我很确定这是在Rails 2中解决AR的N + 1查询问题的正确方法。

现在,如果您为不同的FoodServing记录运行整行100x,您仍然会看到大量的db命中,因为优化仅适用于每个FoodServing.find调用,而不是所有这些调用。< / p>

我想在这一点上我们需要更多日志信息。哪些记录的加载频率超出预期?