查询关联中所有记录满足多个条件的记录

时间:2016-04-09 21:15:00

标签: sql ruby-on-rails

我们说我有四个表,albumssongstagssong_tags,以及他们在Rails中的相关模型,我想要找到所有专辑,其中每首歌都有ids 1,2和3的标签。对于这个例子,让我们说我正在寻找一些锻炼专辑,我希望它们中的每首歌都被标记为&# 34;摇滚","精力充沛"和"乐器"。

有一种简单的方法可以通过少量查询找到它吗?

编辑:

为了澄清,song_tagssongstags之间多对多关系的联接表,因此我的关联如下:

#app/models/albums.rb

has_many :songs

#app/models/songs.rb

has_many :song_tags
has_many :tags, through: :song_tags
belongs_to :album

#app/models/tags.rb

has_many :song_tags
has_many :songs, through: :song_tags

#app/models/song_tag.rb

belongs_to :tag
belongs_to :song

1 个答案:

答案 0 :(得分:0)

有一种ActiveRecord方法:.includes API dock

假设关系

我假设你有以下代码:

#app/models/albums.rb

has_many :songs

#app/models/songs.rb

has_many :tags
belongs_to :album

#app/models/tags.rb

belongs_to :song
has_one :song_tag

#app/models/song_tag.rb

查询界面

基本上你要做的是从Album类开始链接一个调用。

Album.includes(songs: {tags: :song_tags}).where('song_tags.name = ?', ['instrumental', 'rock', 'energetic'])

有关此问题的更多信息,请访问API.rubyonrails.org