如何使用RAW SQL查询模仿活动记录关联



在Rails应用程序中,我有两个相关的(与许多)表相关联 - tracks

是广播节目情节的集合。每个情节都有多个轨道。但是每个曲目都可以出现在许多节目中。

 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

问题是我没有 Artist 模型。而且不想创建它,因为我相信它会使手动数据清理更加困难。

例如,我可以查询我需要的数据:

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;

但是是否可以包装它类似于模型的数据结构,以便于访问?

您可以将SQL查询返回的每个结果映射到结构,这可能使您可以易于访问。这样的东西:

   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查询字符串)

最新更新