ruby rails activerecord嵌套选择

时间:2012-10-06 22:28:06

标签: sql ruby-on-rails ruby activerecord nested

我有三张桌子/模型。

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

1 个答案:

答案 0 :(得分:1)

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

我认为这应该有用(我不确定它会在:through关联上)。试一试。