[英]Efficient way to return select columns from Rails 4 ActiveRecord nested query
[英]ruby rails activerecord nested select
我有三個表/模型。
Recordings (id)
has_many :hits
has_many :tags, :through => :hits
Hits (id, recording_id, tag_id)
belongs_to :recordings
belongs_to :tags
Tags (id)
has_many :hits
has_many :recordings, :through => :hits
我需要查找所有具有作為參數傳遞的所有標簽的錄音。 例如,查找所有具有tag.id == 5,tag.id == 6和tag.id == 7的記錄。 (盡管可能是2個標簽ID或2000個標簽ID)
我試圖通過對數據庫的查詢來做到這一點,以便它快速而不是帶回一個大集合並用ruby減少它。
我認為SQL查詢需要這樣的東西:
SELECT * FROM recordings
WHERE id IN (
SELECT recording_id FROM hits
WHERE recording_id IN (
SELECT recording_id FROM hits
WHERE recording_id IN (
SELECT recording_id from hits WHERE recording_id = 5
)
AND tag_id = '6'
)
AND tag_id == '7'
)
Recording.joins(:tags).where(:tags => { :id => [5,6,7] })
我認為這應該有效(不過,我不確定它是否可以在:through
關聯上使用)。 試試看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.