Не уверен, почему ваш код не работает. Это ошибка или нет вернуть то, что вы ожидаете? Вы можете опубликовать sql, который он генерирует?
Однако вы можете попробовать:
named_scope :has_no_posts, :include => [:posts], :conditions => "posts.id IS NULL"