在Ruby on Rails中将1001个查询减少为2个 - 但不能?

时间:2011-04-04 05:34:12

标签: ruby-on-rails

你知道有时你有1000条Foo记录,每一条都需要访问foo.bar,其中bar是另一个模型,那么将会有1000个查询...

我认为以下一行有1000条记录,

@foos = Foo.find(:all, :include => :bar)

用于在一些早期版本的Rails(通过表连接)中将其转换为1个查询,但我不知道为什么Rails 2 Foundation书籍说它进一步优化为2个查询(为什么2个查询优于1个) ?):

SELECT "foos".* FROM "foos"
SELECT "bars".* FROM "bars" WHERE ("bars"."name" IN ('0001','0002', ... ))

但我不知道为什么在视图中,当我打印出foo.bar.title时,它仍然会在控制台日志中看到每行调用1个查询,因此仍然可以进行1002次查询。我以为它应该是2个查询,就是这样吗?

1 个答案:

答案 0 :(得分:0)

看起来很奇怪......

@foos = Foo.find(:all, :include => :bar)

然后你的代码应该是:

@foos.each do |foo|
  foo.bar.title
end

demeter的第一定律说你应该在你的foo类中有一个名为bar_title的方法

@foos.each do |foo|
  foo.bar_title
end

最后请发布您在控制台中看到的几个查询。这是解决为什么会发生这种情况的提示。