在Datamapper的类中定义关联时,默认情况下似乎没有得到关联的模型数据。
举个例子:
class Song
include DataMapper::Resource
property :id, Serial
property :name, String
property :artist_id, Integer
belongs_to :artist
end
class Artist
include DataMapper::Resource
property :id, Serial
property :name, String
has n, :songs
end
Song.get(params[:id]).to_json
默认情况下,歌曲查询不会与艺术家表执行连接。在上面的例子中,你如何进行连接并将歌曲与歌曲一起获得?分别查询任一类都可以正常工作。注意,这是一个现有的数据库,不是通过DataMapper创建的。
提前致谢!
答案 0 :(得分:2)
我怀疑你正在尝试做的事情目前是不可能的。使用DataMapper,您可以随时轻松加载像歌曲艺术家这样的属性,甚至可以使用他们称之为策略性预先加载的内容,这些内容将在here中进行描述。但即使已经加载了该属性,它也不会包含在to_json
返回的结果中。
所以你有两种选择:
to_json
:song = Song.get(params[:id])
json = song.attributes.merge({:artist => song.artist.attributes}).to_json
def to_json
self.attributes.merge({:time_zone => self.time_zone.attributes}).to_json
end
如果你使用#2,你还必须require 'json'
。
请注意,DataMapper使to_json
递归工作不是一个好主意。否则你最终可能会返回整个数据库:P