Sempre coloque condicionais que não acionam consultas SQL em primeiro lugar em uma condicional. Ao invés de:
if @post.author.posts.count > 1 && @post.published?
...
end
Coloque essas condicionais mais rápidas primeiro, para que se retornem falsas, o outro código não será executado:
if @post.published? && @post.author.posts.count > 1
...
end
A mesma regra se aplica a métodos lentos. Coloque os mais rápidos primeiro, depois os mais lentos por último. por exemplo
if @post.published? && @post.calculate_rank > 5.0
...
end