А все почему? Потому что AR тебе говорит:
Вот возьми a=User.first, а потом если дёрнешь то что уже скачалось - я не пойду в базу, а если то, что ещё не скачалось - пойду. Но семантика вызова одинаковая - что
a.name, что a.posts.
И ты такой в своём view написал
a.name, a.posts - и вроде бы одно и то же, а по факту нихуа