私のアクションは、データベースから取得するインスタンス変数@websites
を設定します。
@websites = Website.all
をスピンしてみる@websites
と、データベースへの呼び出しが 1 つしかないことがわかります。幸せな日々。
<% @websites.each do |website| %>
...
<% end %>
これにより、次の結果が得られます。
Website Load (0.1ms) SELECT "websites".* FROM "websites"
しかし、次のようにラップするとpresent?
:
<% if @websites.present? %>
<% @websites.each do |website| %>
<% end %>
<% else %>
今、私は2つのデータベース呼び出しを受け取ります
(0.2ms) SELECT COUNT(*) FROM "websites"
Website Load (0.1ms) SELECT "websites".* FROM "websites"
2 つのデータベース呼び出しが行われているのはなぜですか? また、2 番目の呼び出しを停止するにはどうすればよいですか。
私にとって、@websites
変数にはすべてのWebサイトがメモリに含まれています。確かにレールは、データベースで新しい SELECT を実行するのではなく、メモリ内のアイテムをカウントするだけでしょうか?