我有三张桌子/模型。
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)
我正在尝试使用对db的查询来执行此操作,以便它快速而不是返回大型集合并使用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'
)
答案 0 :(得分:1)
Recording.joins(:tags).where(:tags => { :id => [5,6,7] })
我认为这应该有用(我不确定它会在:through
关联上)。试一试。