在Rails应用程序中,我有两个关联(尽可能多的)表 - 卷和轨道。
卷是电台节目集的集合。每集都有多个曲目。但每首曲目都可以出现在很多节目中。
卷:
id | title
-----+-----------------------
23 | Oldstyle
24 | How to stop worrying
轨道:
id | artist | title
------+----------------------+------------------------
4764 | John Lennon | Mind Games
4765 | George Harrison | All Those Years Ago
4766 | Paul McCartney | Here Today
我需要的是按艺术家聚合曲目并显示该艺术家跟踪的所有节目音量。类似于Artist.select(name: 'Beatles').volumes
。
问题是我没有艺术家模型。并且不想创建它,因为我相信它会使手动数据清理更加困难。
例如,我可以查询我需要的数据:
SELECT DISTINCT t.artist, v.number
FROM tracks t
JOIN volumes_tracks vt ON vt.track_id = t.id
JOIN volumes v ON v.id = vt.volumes_id
GROUP BY artist, number;
但它是否可以将其包装为类似模型的数据结构以便于访问?
答案 0 :(得分:0)
您可以将sql查询返回的每个结果映射到Struct,这可能会让您轻松访问您正在寻找的内容。像这样:
Artist = Struct.new(:artist, :volume_id)
result=ActiveRecord::Base.connection.execute(sql)
artists = result.map{|r| Artist.new(r['t.artist'], r['v.id']}
first_artist = artists[0].artist
(sql变量代表你的sql查询字符串)