Se você precisar verificar algum registro antes de fazer um loop sobre eles, não faça o seguinte:
if Post.any?
content_tag(:div) do
Post.all.each do |post|
...
end
end
end
O exemplo acima gera duas consultas. Um para contar, outro para buscar registros. É mais rápido (concedido, apenas fracionariamente, mas soma) fazer isso:
posts = Post.all
if posts.any?
content_tag(:div) do
posts.each do |post|
...
end
end
end
Dessa forma, você gera apenas uma consulta.
E se quiser mais limpo, extraia para um ajudante.
def content_tag_if_any(records, tag, &block)
return if records.none?
content_tag(tag) do
records.each do |record|
yield(record)
end
end
end
content_tag_if_any(Post.all, :div) do |post|
...
end