你知道有时你有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个查询,就是这样吗?
答案 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
最后请发布您在控制台中看到的几个查询。这是解决为什么会发生这种情况的提示。