Это случай энергичной / ленивой загрузки.Когда вы делаете:
Message.find(1, :include => :user)
Вы активно загружаете пользователя, потому что, когда вы звоните @message.user
, вы не делаете другой запрос для извлечения пользователя, тогда как делаете:
Message.find(1)
найдет сообщение, а вызов @message.user
сделает еще один SQL-запрос (он же ленивая загрузка).
Если вы посмотрите на фактические SQL-запросы, отправляемые на сервер, вы увидите, что вы зараженывыборка пользователя в первом примере.
Причина, по которой он не отображается, заключается в том, что при проверке @message
он просто показывает сообщение, а не вызов to_json
, который вызывает проверку user
.