我的操作填充了一个实例变量@websites
- 它从数据库中获取。
@websites = Website.all
我可以浏览一下@websites
,看到只有一个对数据库的调用。快乐的时光。
<% @websites.each do |website| %>
...
<% end %>
这导致:
Website Load (0.1ms) SELECT "websites".* FROM "websites"
但如果我用这样的包装它present?
:
<% if @websites.present? %>
<% @websites.each do |website| %>
<% end %>
<% else %>
现在我得到两个数据库调用
(0.2ms) SELECT COUNT(*) FROM "websites"
Website Load (0.1ms) SELECT "websites".* FROM "websites"
为什么要进行两次数据库调用?以及如何停止拨打第二个电话。
对我来说,该@websites
变量将所有网站都保存在内存中。当然,rails 只会计算内存中的项目,而不是在数据库上执行新的 SELECT 吗?