[英]Querying for records where all records in an association meet multiple criteria
假设我在Rails中有四个表, albums
, songs
, tags
和song_tags
及其相关模型,并且我想查找所有专辑,其中每首歌曲都具有ID为1、2和3的标签。对于此示例,让我们例如,我正在寻找一些健身专辑,并且希望其中的每首歌曲都被标记为“摇滚”,“精力充沛”和“乐器”。
是否有一种简单的方法可以通过少量查询找到它?
编辑:
为了澄清song_tags
, song_tags
是一个连接表,用于表示songs
和tags
之间的多对多关系,因此我的关联如下:
#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.