簡體   English   中英

如何使用原始SQL查詢模擬Active Record關聯?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM