繁体   English   中英

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

[英]Querying for records where all records in an association meet multiple criteria

假设我在Rails中有四个表, albumssongstagssong_tags及其相关模型,并且我想查找所有专辑,其中每首歌曲都具有ID为1、2和3的标签。对于此示例,让我们例如,我正在寻找一些健身专辑,并且希望其中的每首歌曲都被标记为“摇滚”,“精力充沛”和“乐器”。

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

编辑:

为了澄清song_tagssong_tags是一个连接表,用于表示songstags之间的多对多关系,因此我的关联如下:

#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

有一种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上找到关于此的一些其他信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM