【问题标题】:Fetch Related Model with DataMapper (Ruby)使用 DataMapper (Ruby) 获取相关模型
【发布时间】:2012-01-02 03:41:54
【问题描述】:

在为 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 创建的。

提前致谢!

【问题讨论】:

    标签: mysql ruby sinatra datamapper


    【解决方案1】:

    我怀疑你正在尝试做的事情目前是不可能的。使用 DataMapper,您始终可以轻松加载诸如歌曲艺术家之类的属性,它甚至使用他们所谓的战略性急切加载,描述为 here。但是即使该属性已经被加载,它也不会包含在to_json返回的结果中。

    所以你有两个选择:

    1. 你可以简单地做一些额外的编码来组成一个哈希,然后在上面使用to_json
    song = Song.get(params[:id])
    json = song.attributes.merge({:artist => song.artist.attributes}).to_json
    
    1. 您可以在 Song 类本身中包含类似的代码:
    def to_json
      self.attributes.merge({:time_zone => self.time_zone.attributes}).to_json
    end
    

    如果您使用#2,您还必须require 'json'

    请注意,DataMapper 让to_json 递归工作并不是一个好主意。否则,您最终可能会返回整个数据库:P

    【讨论】:

      猜你喜欢
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多