[英]Raw sql query and query writting using active record query are giving different results
[英]How to mimic Active Record association using raw SQL query?
在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;
但是是否可以將其包裝為類似模型的數據結構以便於訪問?
您可以將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查詢字符串)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.