Как насчет:
<% if !@foo.nil? && !@foo.new_record? %>
Hello!
<% end %>
Прежде всего, вам необходимо использовать логику AND, а не логику OR, поскольку любой объект ActiveRecord соответствует по крайней мере одному из требований "not nil" или "not new record".
Во-вторых, проверка на nil first гарантирует, что вторая проверка не будет выполнена, если первая не пройдена. Ошибка возникает из-за того, что вы не можете использовать #new_record?
для объекта, который его не поддерживает, поэтому проверка на nil сначала гарантирует, что этот метод никогда не будет запущен на nil.