1

我有三个表/模型。

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'
)
4

1 回答 1

1
Recording.joins(:tags).where(:tags => { :id => [5,6,7] })

我认为这应该可行(不过,我不确定它是否会在:through协会中生效)。试试看。

于 2012-10-06T23:09:12.610 回答