Я подозреваю, что именно то, что вы пытаетесь сделать, в настоящее время невозможно. С DataMapper вы всегда можете легко загрузить свойства, такие как исполнитель песни, и он даже использует то, что они называют стратегической энергичной загрузкой, которая описана здесь . Но даже если свойство уже было загружено, оно не будет включено в результаты, возвращаемые to_json
.
Таким образом, у вас есть две альтернативы:
- Вы можете просто сделать дополнительное кодирование для создания хэша, а затем использовать
to_json
для него:
song = Song.get(params[:id])
json = song.attributes.merge({:artist => song.artist.attributes}).to_json
- Вы можете включить подобный код в сам класс Song:
def to_json
self.attributes.merge({:time_zone => self.time_zone.attributes}).to_json
end
Если вы работаете с # 2, вам также нужно require 'json'
.
Обратите внимание, что для DataMapper было бы плохой идеей заставить to_json
работать рекурсивно. В противном случае вы можете получить целую базу данных: P